LISP - 列表(Lists)

LISP - 列表(Lists) 首页 / LISP入门教程 / LISP - 列表(Lists)

在传统的LISP中,列表是最重要也是最主要的复合数据结构,当今的Common LISP提供其他数据结构,如向量,哈希表,类或结构。

列表是单个链接列表,在LISP中,列表被构造为链接在一起的名为 cons 的简单记录结构的链。

创建一个名为main.lisp的新源代码文件,然后在其中键入以下代码。

(write (cons 1 2))
(terpri)
(write (cons 'a 'b))
(terpri)
(write (cons 1 nil))
(terpri)
(write (cons 1 (cons 2 nil)))
(terpri)
(write (cons 1 (cons 2 (cons 3 nil))))
(terpri)
(write (cons 'a (cons 'b (cons 'c nil))))
(terpri)
(write ( car (cons 'a (cons 'b (cons 'c nil)))))
(terpri)
(write ( cdr (cons 'a (cons 'b (cons 'c nil)))))

当您执行代码时,它返回以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/lisp/lisp-lists.html

来源:LearnFk无涯教程网

(1 . 2)
(A . B)
(1)
(1 2)
(1 2 3)
(A B C)
A
(B C)

上面的示例显示了如何使用cons结构创建单个链接列表,如,列表(A B C)由通过其 cdrs 链接在一起的三个cons单元组成。

尽管cons单元格可用于创建列表,但是,从嵌套的 cons 函数调用中构造列表并不是最佳解决方案, list 函数用于在LISP中创建列表。

first 和 rest 函数给出列表的第一个元素和其余部分。

列表 - 示例1

创建一个名为main.lisp的新源代码文件,然后在其中键入以下代码。

(write (list 1 2))
(terpri)
(write (list 'a 'b))
(terpri)
(write (list 1 nil))
(terpri)
(write (list 1 2 3))
(terpri)
(write (list 'a 'b 'c))
(terpri)
(write (list 3 4 'a (car '(b . c)) (* 4 -2)))
(terpri)
(write (list (list 'a 'b) (list 'c 'd 'e)))

当您执行代码时,它返回以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/lisp/lisp-lists.html

来源:LearnFk无涯教程网

(1 2)
(A B)
(1 NIL)
(1 2 3)
(A B C)
(3 4 A B -8)
((A B) (C D E))

列表 - 示例2

创建一个名为main.lisp的新源代码文件,然后在其中键入以下代码。

(defun my-library (title author rating availability)
   (list :title title :author author :rating rating :availabilty availability)
)

(write (getf (my-library "Hunger Game" "Collins" 9 t) :title))

当您执行代码时,它返回以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/lisp/lisp-lists.html

来源:LearnFk无涯教程网

"Hunger Game"

列表函数

Sr.No.函数 & 描述
1

car

返回其第一个元素。

2

cdr

返回不包含第一个元素的列表

3

cons

它接受两个参数,一个元素和一个列表,并返回一个列表,其中元素插入在最前面。

4

list

它接受任意数量的参数,并返回一个列表,其中参数作为列表的成员元素。

5

append

它将两个或多个列表合并为一个。

6

last

它获取一个列表并返回包含最后一个元素的列表。

7

member

从第一个自变量开始返回列表的其余部分。

8

reverse

以相反的顺序返回一个列表,其中的顶部元素。

列表 - 示例3

创建一个名为main.lisp的新源代码文件,然后在其中键入以下代码。

(write (car '(a b c d e f)))
(terpri)
(write (cdr '(a b c d e f)))
(terpri)
(write (cons 'a '(b c)))
(terpri)
(write (list 'a '(b c) '(e f)))
(terpri)
(write (append '(b c) '(e f) '(p q) '() '(g)))
(terpri)
(write (last '(a b c d (e f))))
(terpri)
(write (reverse '(a b c d (e f))))

当您执行代码时,它返回以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/lisp/lisp-lists.html

来源:LearnFk无涯教程网

A
(B C D E F)
(A B C)
(A (B C) (E F))
(B C E F P Q G)
((E F))
((E F) D C B A)

car和cdr串联

创建一个名为main.lisp的新源代码文件,然后在其中键入以下代码。

(write (cadadr '(a (c d) (e f g))))
(terpri)
(write (caar (list (list 'a 'b) 'c)))   
(terpri)
(write (cadr (list (list 1 2) (list 3 4))))
(terpri)

当您执行代码时,它返回以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/lisp/lisp-lists.html

来源:LearnFk无涯教程网

D
A
(3 4)

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

玩转Spring全家桶 -〔丁雪丰〕

黄勇的OKR实战笔记 -〔黄勇〕

雷蓓蓓的项目管理实战课 -〔雷蓓蓓〕

SRE实战手册 -〔赵成〕

程序员的测试课 -〔郑晔〕

手把手带你写一个Web框架 -〔叶剑峰〕

玩转Vue 3全家桶 -〔大圣〕

Web 3.0入局攻略 -〔郭大治〕

Midjourney入门实践课 -〔Jovi〕

好记忆不如烂笔头。留下您的足迹吧 :)