gpt4 book ai didi

lisp - Lambda 微积分 CONS Pair implementation with Lisp

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:56 25 4
gpt4 key购买 nike

我正在尝试实现 Church Pair Lambda Calc。使用 CLisp 风格。

根据维基百科:

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)))
)

这 2 个函数将 Int 转换为 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

我看不出我做错了什么。任何帮助将不胜感激。

谢谢

最佳答案

  1. 您正在使用 #'FIRST
    这意味着它首先使用函数,而不是您定义的变量。 FIRST(来自标准库)是 car 的另一个名称,即它返回列表的第一个元素(因此错误提示 P不是列表)。
    修复:(funcall FIRST P)
    这将导致错误 *** - EVAL: undefined function P

  2. 这是由您对 FIRST 的定义引起的:#'(lambda (p) (funcall (p TRUE)))
    这意味着:返回一个带有单个参数 p 的 lambda 函数。该参数被忽略。相反,调用全局函数 p 将变量 TRUE 的值作为参数传递:(p TRUE)。然后调用 p 的结果作为(另一个)函数:(funcall ...)
    修复:#'(lambda (p) (funcall p TRUE))
    这将导致错误 *** - :LAMBDA: variable TRUE has no value

  3. 那是因为你还没有真正定义TRUEFALSE
    修复:定义 TRUEFALSE

关于lisp - Lambda 微积分 CONS Pair implementation with Lisp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com