在LispWorks中进行编程08:操纵列表

  • 0

在LispWorks中进行编程08:操纵列表

Category:UI界面编写 Tags : 

操纵列表

我们已经看过程序  列表,它构建了几个项目中的列表。以下是使用列表的更多过程。

返回列表的第一个元素:首先

该过程  首先返回列表的第一个元素:

CL-USER > (first ‘(23 34 45))
23

对于获取列表中的后续项目,有类似的程序  第二第三等,最多可达十分之一

返回除列表的第一个元素之外的所有元素:rest

过程  休息采用一个列表并返回列表减去第一个元素:

CL-USER > (rest ‘(23 34 45))
(34 45)

请注意,传统上首先休息称为carcdr ; 您可能会在Lisp中看到对这些替代名称的引用。

返回列表的第n个元素:nth

过程  nth  接受一个数字和一个列表并返回列表的第n个元素,将第一个元素计为零:

CL-USER > (nth 1 ‘(23 34 45))
34

请注意,通常Lisp从零开始计算事物; 第一第二个程序是例外,因此:

nth 0 lst  相当于(第1个)

(第1lst相当于(第2个)

查找列表的长度:长度

过程  长度  返回列表的长度; 例如:

CL-USER > (length ‘(1 2 3))3

构建列表:缺点

该过程  缺点  采用两个参数-一个对象和一个列表-并返回与添加到列表中的前方的物体的新列表。例如:

CL-USER > (cons 1 ‘(2 3 4 5 6))(1 2 3 4 5 6)

请注意,第一个对象本身可以是一个列表:

CL-USER > (cons ‘(0 1) ‘(2 3 4 5 6))
((0 1) 2 3 4 5 6)

加入列表:追加

过程  追加  采用任意数量的列表,并将它们连接在一起成为一个列表。例如:

CL-USER > (append ‘(1 3 5 7) ‘(2 4 6 8))(1 3 5 7 2 4 6 8)

反转列表:反向

反向过程   采用一个列表并反转它:

CL-USER > (reverse ‘(1 2 3 4))(4 3 2 1)

结合列表程序

使用这些过程来操作列表,我们可以定义一个新过程来执行我们需要的列表上的任何操作。

例如,让我们定义一个过程  插入,在项目列表的第一个和第二个项目之间插入一个项目。所以:

CL-USER 1 > (insert 2 ‘(1 3 4 5 6))

应该给:

(1 2 3 4 5 6)

我们可以这样做:

(defun insert (item lst)  (cons (first lst)        (cons item              (rest lst))))

演习

1.交换列表中的前两项

编写一个过程  交换来交换列表的前两项。检查:

(swap ‘(9 8 7 6))

得到:

(8 9 7 6)

2.复制列表中的第一项

编写一个过程  dup来复制列表中的第一项,检查:

(dup ‘(0 1 2 3))

得到:

(0 0 1 2 3)

3.从列表中返回随机项

编写一个过程  random-elt,它返回一个列表的随机元素。例如:

(random-elt ‘(11 22 33 44))

将随机返回四个数字中的一个。提示:使用n随机的

4.返回列表中的最后一项

编写一个过程last-elt,它返回列表中的最后一项。例如:

(last-elt ‘(1 2 3 4))

应该返回4。

http://mip.i3geek.com

Leave a Reply

搜索

分类目录

公 告

本网站学习论坛:

www.zhlisp.com

lisp中文学习源码:

https://github.com/zhlisp/

欢迎大家来到本站,请积极评论发言;

加QQ群学习交流。