我正在嘗試實施教會對Lambda Calc。風格與CLisp。Lambda微積分CONS對利用Lisp實現
維基百科據:
pair ≡ λx.λy.λz.z x y
到目前爲止,這是我的代碼:
(defvar PAIR
#'(lambda(x)
#'(lambda(y)
#'(lambda(z)
(funcall (funcall z x) y)))))
這是我的第一和第二功能:
(defvar FIRST
#'(lambda(p)
(funcall(p TRUE)))
)
(defvar SECOND
#'(lambda(p)
(funcall(p FALSE)))
)
這兩個功能的轉換Int to ChurchNumber
(defun church2int(numchurch)
(funcall (funcall numchurch #'(lambda (x) (+ x 1))) 0)
)
(defun int2church(n)
(cond
((= n 0) #'(lambda(f) #'(lambda(x)x)))
(t #'(lambda(f) #'(lambda(x) (funcall f
(funcall(funcall(int2church (- n 1))f)x))))))
)
所以,我做的是:
(setq six (int2church 6))
(setq four (int2church 4))
然後:
(setq P (funcall (funcall PAIR six) four))
而且我有:
#<FUNCTION :LAMBDA (Y) (FUNCALL (FUNCALL F X) Y)>
所以,如果我這樣做:
(funcall #'FIRST P)
我已經得到了這個錯誤:
*** - FIRST: #<FUNCTION :LAMBDA (Y) (FUNCALL (FUNCALL F X) Y)> is not a list
我看不到我在做什麼錯。任何幫助,將不勝感激。
感謝
謝謝,我忘了在帖子中包含TRUE和FALSE的定義,但它們是在我的代碼中實現的 – Ivan