diff --git a/src/interpreter/Preprocessor.kt b/src/interpreter/Preprocessor.kt index 523598a..3bd5fa9 100644 --- a/src/interpreter/Preprocessor.kt +++ b/src/interpreter/Preprocessor.kt @@ -91,6 +91,7 @@ open class Preprocessor { term.functor == "*/2" && args.all { it is Expression } -> Multiply(args[0] as Expression, args[1] as Expression) term.functor == "//2" && args.all { it is Expression } -> Divide(args[0] as Expression, args[1] as Expression) term.functor == "between/3" && args.all { it is Expression } -> Between(args[0] as Expression, args[1] as Expression, args[2] as Expression) + term.functor == "succ/2" && args.all { it is Expression } -> Successor(args[0] as Expression, args[1] as Expression) // Database term.functor == "dynamic/1" -> Dynamic((args[0] as Atom).name) diff --git a/src/prolog/builtins/arithmeticOperators.kt b/src/prolog/builtins/arithmeticOperators.kt index 5ce34b3..963a2ca 100644 --- a/src/prolog/builtins/arithmeticOperators.kt +++ b/src/prolog/builtins/arithmeticOperators.kt @@ -208,3 +208,8 @@ class Between(private val expr1: Expression, private val expr2: Expression, priv override fun toString(): String = "$expr1..$expr3..$expr2" } + +class Successor(private val expr1: Expression, private val expr2: Expression) : + CompoundTerm(Atom("succ"), listOf(expr1, expr2)), Satisfiable { + override fun satisfy(subs: Substitutions): Answers = succ(expr1, expr2, subs) +}