使用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)