- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试实现 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
我看不出我做错了什么。任何帮助将不胜感激。
谢谢
最佳答案
您正在使用 #'FIRST
。
这意味着它首先使用函数,而不是您定义的变量。 FIRST
(来自标准库)是 car
的另一个名称,即它返回列表的第一个元素(因此错误提示 P
不是列表)。
修复:(funcall FIRST P)
这将导致错误 *** - EVAL: undefined function P
这是由您对 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
那是因为你还没有真正定义TRUE
和FALSE
。
修复:定义 TRUE
和 FALSE
。
关于lisp - Lambda 微积分 CONS Pair implementation with Lisp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537622/
微积分运算在机器学习领域扮演着至关重要的角色,它不仅是许多基础算法和模型的核心,还深刻影响着模型的优化、性能评估以及新算法的开发。 掌握微积分,不仅让我们多会一种计算方式,也有助于理解各种机器学习算
我正在用 java 开发一个程序,它将找到给定函数的集成。例如 cos(x+3x^2)。现在我想检查用户是否给出了正确的输入。在检查输入的有效性时是否有任何正则表达式可以使用?例如,输入必须始终以积分
最近在研究lambda的计算,对reduction和substitution有很多疑惑。什么是 alpha 和 beta 缩减?何时以及为何使用它们? 如果有人能说出任何关于 lambda 微积分中减
我正在尝试利用 JavaScript 和 PEG.JS 将 lambda 演算项解析为 AST。语法相当简单: /*******************************************
我目前正在学习 Haskell,并且还在大学参加关于函数式编程的相当理论的讲座。 我知道这纯粹是理论/学术问题,但是我很感兴趣如何用纯 lambda 演算(即没有定义任何常量)简单地表达不同的简单函数
是否有任何合适的积分和微分算法,我可以用 C++ 或 C 来实现。只需将其命名为引用即可。如果您愿意提供示例代码,我将非常高兴您的回答和解释。提前致谢。 最佳答案 您可以使用 Calculus c++
我正在使用 Maths commons 来解决一些矩阵和复数但我现在想整合和区分所有类型的功能但正在阅读Polynomials section 我真的不知道该怎么做。我需要一些帮助关于如何使用此库创建
我正在尝试使用 clisp Lambda Calc 实现除法函数。风格 我读自this一个部门的 lambda 表达式是: Y (λgqab. LT a b (PAIR q a) (g (SUCC q
我正在尝试实现 Church Pair Lambda Calc。使用 CLisp 风格。 根据维基百科: pair ≡ λx.λy.λz.z x y 到目前为止,这是我的代码: (defvar PA
我安装了 ccx(Calculix 求解器程序)来解决物理问题。预处理器 cgx 工作正常,但是当我在终端中使用 .inp 文件 (abaqus) 运行 ccx 时,出现错误: ccx: symbol
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我正在尝试构建一个接受给定数量的参数并始终返回相同值的函数。 这是作业的一部分。提供了一个提示: The "k-way T" is a function that takes k arguments
我正在 Haskell 中实现一个不纯的非类型 lambda 演算解释器。 我目前坚持实现“alpha-congruence”(在某些教科书中也称为“alpha-equivalence”或“alpha
我正在尝试构建一个接受给定数量的参数并始终返回相同值的函数。 这是作业的一部分。提供了一个提示: The "k-way T" is a function that takes k arguments
我是一名优秀的程序员,十分优秀!