我做了这个 IF-THEN-ELSE Lambda Calculus 代码
(defvar IF-THEN-ELSE
#'(lambda(con)
#'(lambda(x)
#'(lambda(y)
#'(lambda(acc1)
#'(lambda (acc2)
(funcall (funcall (funcall (funcall con x) y) acc1) acc2))))))
)
(defun IF-THEN-ELSEOP(c x y a1 a2)
(funcall (funcall (funcall (funcall (funcall IF-THEN-ELSE c) x) y) a1) a2)
)
而这个更大或等于运算符
(defvar GEQ
#'(lambda(p)
#'(lambda(q)
(funcall #'LEQOP q p)))
)
LEQOP 是“小于等于”的功能,它工作正常。所以当我这样称呼 IF-THEN-ELSE 时(“六”和“二”是教堂号码)
(if-then-elseop GEQ six two (print "THIS") (print "THAT"))
作为输出我有
"THIS"
"THAT"
"THIS"
我传递的两个函数都被调用了。我怎样才能避免它以仅作为输出“THIS”获得?
我使用的每个函数都会发生这种情况,这很麻烦,因为我想在递归调用中使用 IF-THEN-ELSE,因此必须根据 IF-THEN-ELSE eval 调用一个函数。
任何帮助,将不胜感激
谢谢。