package prolog.components.terms import java.util.Optional data class Variable(val name: String) : Term { private var alias: Optional = Optional.empty() fun alias(): Optional { return alias } fun bind(term: Term): Optional { 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() } } }