代码改变世界

《how to design programs》13章用list构造表

2014-03-12 17:28  youxin  阅读(297)  评论(0编辑  收藏  举报

使用cons构造一个包含多个元素的表十分麻烦,因此scheme提供了list操作,该操作接受任意量的值作为输入以创建一个表,下面是扩展的语法:

<prm>=list

扩展的scheme值的集合是:

<val>=(list  <val> ....      <val>)

理解list表达式的一种简单方法是将它当做若干cons的简写,具体来说,就是
(list exp1 expe2       .......... exp-n)

看成如下:

(cons exp1 (cons  .      (cons exp-n empty))

 

下面是3个例子:

(list 1 2)

=(cons 1 (cons 2 empty))

 

list不仅作用于值,也可以作用于表达式:

(list  (+ 0 1) (+ 1 1))

=(list 1 2)

在创建表之前,scheme先计算表达式,如果表达式计算错误,表就不会被创建。

(list (/ 1 0) (+ 1 1)

简而言之,list的行为和scheme的其他基本操作完全一样。

(list (cons 1 (cons 13 empty)))
='((1 13))

'(1 2 3) 表示(list 1 2 3)

'(a b c)这个简写表示了:

 (list 'a 'b 'c)

更有意思的是:

'(<html>
     (<title> My first web page)
   (<body> oh!)
)

代表了:
(list '<html>
     (list '<title> 'My 'First 'page)
      (list '<body> 'oh!)

)

'(1 a 2 b 3 c) 回复list已经引号
 (list 1 'a 2 'b 3 'c)