Assert{a,z,}
This commit is contained in:
parent
f9017da734
commit
80fb3d1e60
11 changed files with 373 additions and 79 deletions
|
@ -66,72 +66,40 @@ open class Preprocessor {
|
|||
|
||||
when {
|
||||
// TODO Remove hardcoding by storing the functors as constants in operators?
|
||||
|
||||
term.functor == ":-/2" -> Rule( args[0] as Head, args[1] as Body )
|
||||
|
||||
// Logic
|
||||
term.functor == "=/2" -> {
|
||||
Unify(args[0], args[1])
|
||||
}
|
||||
term.functor == "=/2" -> Unify(args[0], args[1])
|
||||
term.functor == "\\=/2" -> NotUnify(args[0], args[1])
|
||||
term.functor == ",/2" -> Conjunction(args[0] as LogicOperand, args[1] as LogicOperand)
|
||||
term.functor == ";/2" -> Disjunction(args[0] as LogicOperand, args[1] as LogicOperand)
|
||||
term.functor == "\\+/1" -> Not(args[0] as Goal)
|
||||
term.functor == "==/2" -> Equivalent(args[0], args[1])
|
||||
|
||||
term.functor == "\\=/2" -> {
|
||||
NotUnify(args[0], args[1])
|
||||
}
|
||||
|
||||
term.functor == ",/2" -> {
|
||||
Conjunction(args[0] as LogicOperand, args[1] as LogicOperand)
|
||||
}
|
||||
|
||||
term.functor == ";/2" -> {
|
||||
Disjunction(args[0] as LogicOperand, args[1] as LogicOperand)
|
||||
}
|
||||
|
||||
term.functor == "\\+/1" -> {
|
||||
Not(args[0] as Goal)
|
||||
}
|
||||
|
||||
term.functor == "==/2" -> {
|
||||
Equivalent(args[0], args[1])
|
||||
}
|
||||
|
||||
term.functor == "=\\=/2" && args.all { it is Expression } -> {
|
||||
EvaluatesToDifferent(args[0] as Expression, args[1] as Expression)
|
||||
}
|
||||
|
||||
term.functor == "=:=/2" && args.all { it is Expression } -> {
|
||||
EvaluatesTo(args[0] as Expression, args[1] as Expression)
|
||||
}
|
||||
|
||||
term.functor == "is/2" && args.all { it is Expression } -> {
|
||||
Is(args[0] as Expression, args[1] as Expression)
|
||||
}
|
||||
term.functor == "=\\=/2" && args.all { it is Expression } -> EvaluatesToDifferent(args[0] as Expression, args[1] as Expression)
|
||||
term.functor == "=:=/2" && args.all { it is Expression } -> EvaluatesTo(args[0] as Expression, args[1] as Expression)
|
||||
term.functor == "is/2" && args.all { it is Expression } -> Is(args[0] as Expression, args[1] as Expression)
|
||||
|
||||
// Arithmetic
|
||||
|
||||
term.functor == "-/1" && args.all { it is Expression } -> {
|
||||
Negate(args[0] as Expression)
|
||||
}
|
||||
term.functor == "-/1" && args.all { it is Expression } -> Negate(args[0] as Expression)
|
||||
term.functor == "-/2" && args.all { it is Expression } -> Subtract(args[0] as Expression, args[1] as Expression)
|
||||
term.functor == "+/1" && args.all { it is Expression } -> Positive(args[0] as Expression)
|
||||
term.functor == "+/2" && args.all { it is Expression } -> Add(args[0] as Expression, args[1] as Expression)
|
||||
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 == "-/2" && args.all { it is Expression } -> {
|
||||
Subtract(args[0] as Expression, args[1] as Expression)
|
||||
}
|
||||
|
||||
term.functor == "+/1" && args.all { it is Expression } -> {
|
||||
Positive(args[0] as Expression)
|
||||
}
|
||||
|
||||
term.functor == "+/2" && args.all { it is Expression } -> {
|
||||
Add(args[0] as Expression, args[1] as Expression)
|
||||
}
|
||||
|
||||
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)
|
||||
// Database
|
||||
term.functor == "assert/1" -> {
|
||||
if (args[0] is Rule) {
|
||||
Assert(args[0] as Rule)
|
||||
} else {
|
||||
Assert(Fact(args[0] as Head))
|
||||
}
|
||||
}
|
||||
term.functor == "asserta/1" -> AssertA(args[0] as Clause)
|
||||
|
||||
// Other
|
||||
term.functor == "write/1" -> Write(args[0])
|
||||
|
|
Reference in a new issue