*
!<+E2.
!
!A+R.
"<?A??/?.$
从上面我们可以看到使用“M-可以从列表中分离最开始的两个元素。当然,如果我们尝试获取比列表中包
含的元素数量更多的元素,我们只会得到一个错误提示。但是有一个特殊情况就是获得一个没有包含任
何元素的空列表"$。
!+[A, B | C] = [1, 2].
"*?!$
!/+A.
*
!.+B.
!
!0+C.
"$
从上面所有的例子中,我们使用了新的变量名,而没有使用已经用过的那些:
N、K5、*、!、5、、、4。原因在于在上下文相关的地方(同一个作用域),我们的变
量只能赋值一次。我们稍后会回到这里,它并不想听上去那么奇怪。
下面的例子展示了我们如何得到一个列表的长度:
;A
;=%"B3*$
B"$;+
1C
B"NM5$;+
*,B5
编译文件“A -并且运行一下:
!G+c(tut4).
>9?A@
<1+tut4:list_length([1,2,3,4,5,6,7]).
.
解释下面的语句:
B"$;+
1C
表明了空列表的长度被我们定义为 1。
B"NM5$;+
*,B5
上面的代码表明一个非空列表的长度是第一个元素 N 加上后面剩下的 5 部分的长度的和。
(对于高级一点的读者:这里并非只能使用递归的方式,也有一些更好的方式来实现哈。)
一般情况下我们可以在我们在其他语言中使用“记录 #-或者“结构 #-的地方说我们使用了列
表,特别是我们试图表现一些可变大小的数据时。(就如同我们在其他语言中使用链表一样)
没有一个字符串数据类型,取而代之的是使用 E4 表示的列表。所以列表"G.?G0?GG$等效为字
符串“'#-。E 是一个聪明的系统,可以猜出我们的列表到底想要表达什么样的数据,并且以
合适的方式进行输出,这在大多数场合都是适用的。例如:
<*+[97,98,99].
O'#O
1.6 标准模块和手册页面