Move to new parser
This commit is contained in:
31
eval.lisp
31
eval.lisp
@ -29,25 +29,10 @@
|
||||
(:documentation "Condition representing an error that occurred during
|
||||
evaluation for a proposition."))
|
||||
|
||||
(defun operator-argument-count (oper)
|
||||
"Return the minimum number of arguments that OPER takes as the first value,
|
||||
and the maximum number (or nil for infinity) as a second value."
|
||||
(case oper
|
||||
(and (values 2 nil))
|
||||
(or (values 2 nil))
|
||||
(xor (values 2 nil))
|
||||
(not (values 1 1))
|
||||
(implies (values 2 2))
|
||||
(converse (values 2 2))
|
||||
(iff (values 2 2))
|
||||
(nand (values 2 nil))
|
||||
(nor (values 2 2))
|
||||
(t (error "unknown operator: ~S" oper))))
|
||||
|
||||
(defun logical-xor (&rest args)
|
||||
"Logical xor (not equal) each argument in turn with its following argument.
|
||||
NOTE: This is NOT a macro, so all arguments, so there is no short circuit
|
||||
evaluation (all arguments are evaluated no matter what)."
|
||||
NOTE: This is NOT a macro, there is no short circuit evaluation (all arguments
|
||||
are evaluated no matter what)."
|
||||
(loop with result = nil
|
||||
for arg in args do
|
||||
(setq result (not (eq result arg)))
|
||||
@ -55,21 +40,21 @@ evaluation (all arguments are evaluated no matter what)."
|
||||
|
||||
(defun logical-and (&rest args)
|
||||
"Logical and (all true).
|
||||
NOTE: This is NOT a macro, so all arguments, so there is no short circuit
|
||||
evaluation (all arguments are evaluated no matter what)."
|
||||
NOTE: This is NOT a macro, there is no short circuit evaluation (all arguments
|
||||
are evaluated no matter what)."
|
||||
(not (member nil args)))
|
||||
|
||||
(defun logical-or (&rest args)
|
||||
"Logical or (one or more true).
|
||||
NOTE: This is NOT a macro, so all arguments, so there is no short circuit
|
||||
evaluation (all arguments are evaluated no matter what)."
|
||||
NOTE: This is NOT a macro, so there is no short circuit evaluation (all
|
||||
arguments are evaluated no matter what)."
|
||||
(not (not (member t args))))
|
||||
|
||||
(defun logical-implies (prop1 prop2)
|
||||
"Evaluate the logical implies operation on PROP1 and PROP2. That is \"if
|
||||
PROP1, then PROP2\".
|
||||
NOTE: This is NOT a macro, so all arguments, so there is no short circuit
|
||||
evaluation (all arguments are evaluated no matter what)."
|
||||
NOTE: This is NOT a macro, so there is no short circuit evaluation (all
|
||||
arguments are evaluated no matter what)."
|
||||
(if prop1 ;; only if first is true
|
||||
prop2 ;; eval second
|
||||
t)) ;; otherwise, just return true
|
||||
|
Reference in New Issue
Block a user