负暄琐话

我的email: rot47('649@ 6(hF+`hd"w=92vhG{>}G3"@l M >:>6?4@56 \F')

用户操作
[即时聊天] [发私信] [加为好友]
g9ID:g9yuayon
924025次访问,排名35好友47人,关注者46
姓名:g9yuayon
前世:夜郎国厚脸皮神棍
魅力指数:0
名气:1
宠物:一只从来不对生人叫的看门狗
g9yuayon的文章
原创 244 篇
翻译 4 篇
转载 50 篇
评论 912 篇
g9的公告
最近评论
fferror:g9大大,最后一个C版本的SQUARE(x)是不是有错? 等待回复。
neilton:嘿嘿
neilton:嘿嘿
duguguiyu1984:老大邪恶了。。。呵呵。。。
xingranliuyun:我感觉到这两个人的灵魂就像最后的那段音乐一样,自由、奔放。

我燃了!
文章分类
收藏
    相册
    旅游
    计算机科学
    Lambda the Ultimate
    软件开发
    Reddit编程专栏(RSS)
    正在读的书
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 交互递归和丘齐数收藏

    新一篇: MIT开发的画图程序 | 旧一篇: 做什么技术收入最高?

    上次说到丘齐数 的时候并没有提到怎么定义后继函数, succ(n) = n + 1。这两天读Pierced的书(顺便说一句,这本Types and Programming Languages的叙述清晰,推理自然,符号也用得非常简约。相比那本Principles of Program Analysis,Peirce这本书读起来轻松多了。也不知道是作者风格问题,还是类型系统的线条本来就比较清爽)时,突然意识到succ的定义其实暗合(多半是明合,不过我没有清晰的证明)交互递归。先看上次定义的丘齐数:

    n  = lambda s z . sn z

    如果把s看成后继函数,z看成0,n就很好理解了:对0做n次后继操作。

    现在看后继函数的定义:succ = lambda n s z. s (n s z)

    看到没有,如果我们同样把s看作后继函数,z看成0, 那succ(n)相当于对0做n次后继操作,然后再做一次。相当于说说succ(n) = n + 1。非常直观吧?再仔细观察,丘齐数的定义出现在后继函数的定义里,反之亦然。换句话说,俺们用到了交互递归。如果有老大不了解交互递归,不妨不用任何循环语句写一个打印有任意结构的树的程序。

    那我们怎么知道这个交互递归收敛呢?那就要看0这个丘齐数的定义了:0 = lambda s z. z。同样,把s看成后继函数。s完全没有被应用到被看作0的z上。换句话说,当n等于0时,succ(n)=succ(0) = s (0 s z) = s z = z = 0。刚好收敛。当然,这不是严格的证明。严格的证明就留给各位老大了。

    最后来道练习题(其实就是Pierce书上的练习5.2.2):用另外一种方式定义后继函数。

    发表于 @ 2006年10月02日 14:46:00|评论(loading...)|编辑

    新一篇: MIT开发的画图程序 | 旧一篇: 做什么技术收入最高?

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © g9