Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31174
  • 博文数量: 8
  • 博客积分: 165
  • 博客等级: 入伍新兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-17 05:05
文章分类

全部博文(8)

文章存档

2013年(2)

2012年(6)

我的朋友

分类: LINUX

2012-10-14 15:41:25

the scheme programming language 的一道习题(3.2.3),不用letrec定义even?函数。

let是Scheme语言里的一个语法,定义一个函数,不能递归定义。

letrec是let的“加强版”,可以在letrec里递归定义函数,

letrec的介绍里就用的even?做示例,示范letrec?的用法。

如下:

点击(此处)折叠或打开

  1. (letrec ([even?
  2.           (lambda (x)
  3.             (or (= x 0)
  4.                 (odd? (- x 1))))]
  5.          [odd?
  6.           (lambda (x)
  7.             (and (not (= x 0))
  8.                  (even? (- x 1))))])
  9.   (even? 20))


下边是用let定义的,其实也就是用lambda把函数传来传去而已,

最后调用时even函数把自己传给自己,变相的通过lambda表达式递归调用了一下。

点击(此处)折叠或打开

  1. (let ((even (lambda (f x)
  2.               (let ((odd (lambda (g x)
  3.                            (and (not (= x 0)) (f g (- x 1))))))
  4.                    (or (= x 0) (odd f (- x 1)))))))
  5. (even even 10))


reference:

阅读(2425) | 评论(0) | 转发(0) |
0

上一篇:Scheme 初学(4)

下一篇:MapReduce简介

给主人留下些什么吧!~~