scheme - 为什么这个简单的方案代码会出错?
问题描述
(define ZERO (lambda (f x) x))
(define ONE (lambda (f x) (f x)))
(define SUCC (lambda (n) (lambda (f x) (f (n f x)))))
(display (ZERO 1 0))
(display (ONE 1 0))
(display ((SUCC ZERO) 1 0))
ZERO 功能工作正常。当我运行这段代码时,我得到一个错误,
错误:无效的应用程序:(1 0)
对于ONE
,SUCC
函数。
如何修复我的代码以使其正常工作?
解决方案
这是数字的 Church 编码;数字 K 由函数f
对某个参数的 K 次应用来表示x
。
(令人惊讶的是,函数的恒等式和那个论点是无关紧要的——你可以在不关心的情况下构建所有的数学。)
你可以通过适当的选择来让它变得有点意义f
和x
- 例如,尝试0
和
(define (inc x) (+ x 1))
所以数字 K 表示为 0 加 1,K 倍。
> (ZERO inc 0)
0
> (ONE inc 0)
1
> ((SUCC ONE) inc 0)
2
您还可以使用评估函数添加一些便利:
> (define (number n) (n inc 0))
> (number ZERO)
0
> (number ONE)
1
> (number (SUCC (SUCC (SUCC (SUCC ONE)))))
5
推荐阅读
- path - 在 git bash 中找不到 wget 命令
- python-3.x - 将 RGB 数组转换为 PIL 图像
- c++ - 这些是什么类型的错误?即使我不在 linux 上工作,我也遇到了 linux 错误
- android - 我如何从另一个活动开始轮流 NavigationLauncher
- swift - 为什么 activate(ignoringOtherApps:) 不启用菜单栏?
- java - 在路由骆驼apache之间传递参数
- asynchronous - 设计将我的应用程序连接到消息代理的流程
- c# - 使用字典存储预制的参数 Null Exception 错误并在游戏场景中实例化它
- python - 我可以用 python 服务器但 c++ 客户端建立一个 tcp/ip 套接字吗?
- javascript - 有谁知道为什么我的这段代码没有运行?当我单击提交按钮时,它什么也不做?如果有人可能有想法?