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 } } }