38 lines
784 B
Kotlin
38 lines
784 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
|
|
}
|
|
}
|
|
|
|
override fun equals(other: Any?): Boolean {
|
|
return if (alias.isPresent) {
|
|
alias.get() == other
|
|
} else {
|
|
name == other.toString()
|
|
}
|
|
}
|
|
}
|