1
저는 함수 프로그래밍, lisp 및 람다 미적분학에 대한 새로운 기능을 제공합니다. 임 일반 Lisp 람다 Calc 스타일로 AND 연산자를 구현하려고.CLAMS의 람다 미적분 및 구현
위키:
AND : = λp.λq.pqp
지금까지 내 코드입니다 :
(defvar TRUE #'(lambda(x)#'(lambda(y)x)))
(defvar FALSE #'(lambda(x)#'(lambda(y)y)))
(defun OPAND (p q)
#'(lambda(f)
#'(lambda(p) #'(lambda(q) (funcall p (funcall q(funcall p))))))
)
내가 발견이 2 변환 기능 :
(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))))))
)
내가 할 경우 내가 이렇게하면
(church2int FALSE)
내가 0있어 :
(church2int TRUE)
가 나는 괜찮아 생각
#<FUNCTION :LAMBDA (X) (+ X 1)>
있습니다. 나는이 이렇게한다면 :
(church2int (OPAND FALSE FALSE))
을 나는있어 :
#<FUNCTION :LAMBDA (Q) (FUNCALL P (FUNCALL Q (FUNCALL P)))>
I가 0이 있어야합니다 어디에 내 코드에 문제가 있나요? 또는 나는 무엇인가 놓치고 있냐?
덕분에 당신은 당신이하려고하는 것처럼, 당신은이 작업을 수행 할 필요가,이 매개 변수와 함수로 opand
를 정의하려면