30 lines
593 B
Kotlin
30 lines
593 B
Kotlin
package prolog.components.terms
|
|
|
|
import java.util.Optional
|
|
|
|
data class Variable(val name: String): Term {
|
|
private var alias: Optional<Term> = Optional.empty()
|
|
|
|
fun alias(): Optional<Term> {
|
|
return alias
|
|
}
|
|
|
|
fun bind(term: Term): Optional<Term> {
|
|
if (alias.isEmpty) {
|
|
alias = Optional.of(term)
|
|
}
|
|
|
|
return alias
|
|
}
|
|
|
|
fun unbind() {
|
|
alias = Optional.empty()
|
|
}
|
|
|
|
override fun toString(): String {
|
|
return when {
|
|
alias.isPresent -> "$name = ${alias.get()}"
|
|
else -> name
|
|
}
|
|
}
|
|
}
|