我正在使用Dr Racket检查传递的表达式是否为Conjunctive normal form。
代码首先检查表达式是否为正常形式。
(define (is-nnf? expr)
(cond
[ (is-constant? expr) #t ]
[ (is-variable? expr) #t ]
[ (is-not? expr) (is-variable? (op1 expr)) ]
[ (is-or? expr) (and (is-nnf? (op1 expr)) (is-nnf? (op2 expr))) ]
[ (is-and? expr) (and (is-nnf? (op1 expr)) (is-nnf? (op2 expr))) ]
)
)
is-nnf递归检查表达式是否为正常形式。
我正在尝试编写一个名为is-cnf的类似表达式,以递归方式检查表达式是否处于联合正常形式。
是常数 - >检查表达式是否为常量(例如#t,#f)
is-variable - >检查表达式是否为变量(例如' a,' x)
is-not - >检查列表的第一个元素是否为“不”(例如。 '(不是x))
是 - 或 - >检查列表的第一个元素是否为' not( 例如。 '(或x y))
是 - 和 - >检查列表的第一个元素是否为a ' not(例如'(和x y))