数学 Lisp 实现加一操作

hz_qiuyuanxin · 2014年06月25日 · 最后由 luikore 回复于 2014年06月26日 · 9205 次阅读

如何理解 lisp 里加一操作的这个实现?实在理解不了。

Exercise 2.6. In case representing pairs as procedures wasn't mind-boggling enough, consider that, in a language that can manipulate procedures, we can get by without numbers (at least insofar as nonnegative integers are concerned) by implementing 0 and the operation of adding 1 as

(define zero (lambda (f) (lambda (x) x)))

(define (add_1 n)
  (lambda (f) (lambda (x) (f ((n f) x)))))

#1 楼 @Rei 我想起那个老笑话,N 年前,一个特工历经千辛万苦也只能搞到最后几页打印好的 Lisp 代码,心想总比没有强,结果回家一看全是右括号 )))))))))))))))))))))

#3 楼 @luikore 图灵的可行性计算吧

这个就是老子的,一生二,二生三,三生万物。。。好吧我承认我在扯淡。

推荐这个 http://hi.baidu.com/xiangxuehai000/item/30b7583024bd02c91a9696c6 觉得可以考虑下重命名试试。 比如把 zero 改成 zero-time-operation?

倒是觉得这句话很牛逼“算法可计算函数都是递归函数“ http://zhidao.baidu.com/link?url=hQqthbqY96AAqUkUJWevU8k7Qr6At1cnDHavhiioUdyvCQyYurfRK3DW1D6yhdofx9VtzniqFDPh_R-8KogAJK

觉得递归,就是定义了 0,然后定义了 1,再然后再在上面构建加法,乘法什么的。这个是不是就是丘奇数的意义?我不知道。。。

这个是邱奇数,另外一套体系, 跟你理解的加一不一样

#7 楼 @yfractal 和老子的话意思完全不一样,如果一样的话,早几千年就做出计算机了

#3 楼 @luikore 的答案完全正解。 有一本书叫《图灵的秘密》 里面讲了 lisp 中 lamda 的数学原理

church 比图灵早提出的一种计算模型,实际上却没法流行开来,为什么呢,因为没现实对照物,图灵以 side effect 弄了个比老师更好用的模型,直接影响了后来计算机的发展。

#9 楼 @luikore 说了是在扯淡了。。。 但觉得,他们两者有些相似。

觉得丘奇数,是对一个 x 进行 f 操作,比如 (f x),(f (f x)) 。是一种递推或者递归。

老子的三生万似乎说的也是递推,当然了,古人说话都很含糊,鬼知道他说的是什么。。。

当然我对这两个东西都不怎么了解,哪里说错了,求指正 😄

举得一样东西是否被发明,收到多方面的限制。 比如需求,比如经济条件。

#9 楼 @luikore 说了是在扯淡了。。。 但觉得,他们两者有些相似。

觉得丘奇数,是对一个 x 进行 f 操作,比如 (f x),(f (f x)) 。是一种递推或者递归。

老子的三生万似乎说的也是递推,当然了,古人说话都很含糊,鬼知道他说的是什么。。。

当然我对这两个东西都不怎么了解,哪里说错了,求指正 😄

举得一样东西是否被发明,收到多方面的限制。 比如需求,比如经济条件。

#12 楼 @yfractal 老子那个一是道,二是阴阳,三是天地人,然后就是万物了,和自然数的递推关系没关系啊

#14 楼 @luikore 有道理! 想必是我曲解了。。。见笑,见笑!

#14 楼 @luikore 一不是道吧... 「道生一」...

#16 楼 @blacktulip 哦对... 反正就是类似的...

需要 登录 后方可回复, 如果你还没有账号请 注册新账号