《How to design programs》第二回

今天归纳第四章《条件表达式和函数》。


一、条件表达式

说到条件表达式,先说布尔型变量(Boolean)。Boolean也是scheme的一个基本类型。lisp在断言时,空表和nil是false,其余都是true。scheme的不同实现有所不同。在drscheme中(原先是MIT Scheme),可以直接为true和false。下面使用drscheme中的规范。

长话短说,直接上代码。

(= 3 3)

这个表达式很简单,就是判断3是否等于3。其实我们在C语言中碰到过”=“和”==“。有时候我们对此非常头疼,还可能出BUG。在scheme中变量的赋值不使用”=“号,使用”define“。局部变量的定义还可能使用”let“等等。这里我们只要知道”=“是判断是否相等。

那么下面就简单了

(< 4 5) , (> 3 7)

然后scheme的不同实现提供不同的类型判断。如drscheme中的"empty?"符号是判断list是否为空。这里有一点一定要记住,lisp之所以夸张地说”每一个使用lisp的人,最后都会在发明一种lisp方言“,是因为lisp太灵活了,没有像C、java等等统一的标准。所以在不同的解释器下,要首先读用户手册(这点挺烦的,不过如果是大牛也可以自己写解释器不是么)。


二、条件函数设计

函数设计是每个程序设计中首先也是必须要考虑的东西。后面会有若干关于函数的处方”recipe“的解释说明。其实我学习drscheme一个暑假,要说让我收获最大的是应该属于函数的设计规范,这也是学习scheme语言的一大收获。请读者不要小视。

;; is-between-5-6? : number  ->  boolean
;; to determine whether n is between 5 and 6 (exclusive)
(define (is-between-5-6? n)
  (and (< 5 n) (< n 6)))
这个是书上的一个程序。看名字就知道这个函数是判断输入值是否在5与6之间,返回true或false。

仔细看scheme貌似没有return,其实这正是它的特点。lisp语言的特点就是read-eval-print,也就是说求值打印。函数也是在求值。这里define是一个原语(primitive),它也在求值!!!如果你把这个定义语句输入,那么求值后是”(lambda (n) (and (< 5 n) (< 6 n)))“。这是一个lambda列表,也是一个特殊的列表,是一个值(注意啊!开始我就被坑了!drscheme里面没有求值显示,我使用newlisp后才发现这个东西!!!)。


三、后记

今天中午没睡好。下午去找老师关于选课的事,也是碰了一鼻子灰。不过写着写着心情就通畅许多了。有句话说得好,”最重要的就是不要去看远方模糊的,而要去做手边清楚的事“,希望能与诸位分享。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值