《How to design programs》第二回

前端之家收集整理的这篇文章主要介绍了《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后才发现这个东西!!!)。


三、后记

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

猜你在找的设计模式相关文章