LISP集合(Set)

/ / LISP集合(Set)

adjoin 函数首先在给定列表中查找该元素(如果找到),然后返回原始列表,否则,它将创建一个新的cons单元格,其 car 作为元素,而 cdr 指向原始列表,并返回此新列表。

adjoin 函数还使用:key 和:test 关键字参数。

adjoin 函数不会修改原始列表,因此要更改列表本身,您必须将adjoin返回的值分配给原始列表,或者可以使用 pushnew 宏将一个元素添加到集合中。

Set集合- 示例

创建一个名为main.lisp的新源代码文件,然后在其中键入以下代码。
; creating myset as an empty list
(defparameter *myset* ())
(adjoin 1 *myset*)
(adjoin 2 *myset*)

; adjoin did not change the original set
;so it remains same
(write *myset*)
(terpri)
(setf *myset* (adjoin 1 *myset*))
(setf *myset* (adjoin 2 *myset*))

;now the original set is changed
(write *myset*)
(terpri)

;adding an existing value
(pushnew 2 *myset*)

;no duplicate allowed
(write *myset*)
(terpri)

;pushing a new value
(pushnew 3 *myset*)
(write *myset*)
(terpri)

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

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

来源:LearnFk无涯教程网

NIL
(2 1)
(2 1)
(3 2 1)

函数的元素组使您可以检查元素是否为集合的元素,以下是这些函数的语法-

member item list &key :test :test-not :key 
member-if predicate list &key :key 
member-if-not predicate list &key :key

这些函数在给定列表中搜索满足测试要求的给定元素。如果找不到此类元素,则函数返回 nil。否则,返回以元素为第一个元素的列表尾部。

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

(write (member 'zara '(ayan abdul zara riyan nuha)))
(terpri)
(write (member-if #'evenp '(3 7 2 5/3 'a)))
(terpri)
(write (member-if-not #'numberp '(3 7 2 5/3 'a 'b 'c)))

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

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

来源:LearnFk无涯教程网

(ZARA RIYAN NUHA)
(2 5/3 'A)
('A 'B 'C)

Set Union

以下是这些函数的语法-

union list1 list2 &key :test :test-not :key 
nunion list1 list2 &key :test :test-not :key

union     -  函数采用两个列表,并返回一个新列表,其中包含两个列表中的任何一个元素。

nunion   -  函数执行相同的操作,但可能会破坏参数列表。

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

(setq set1 (union '(a b c) '(c d e)))
(setq set2 (union '(#(a b) #(5 6 7) #(f h)) 
   '(#(5 6 7) #(a b) #(g h)) :test-not #'mismatch)
)
       
(setq set3 (union '(#(a b) #(5 6 7) #(f h)) 
   '(#(5 6 7) #(a b) #(g h)))
)
(write set1)
(terpri)
(write set2)
(terpri)
(write set3)

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

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

来源:LearnFk无涯教程网

(A B C D E)
(#(F H) #(5 6 7) #(A B) #(G H))
(#(A B) #(5 6 7) #(F H) #(5 6 7) #(A B) #(G H))

Set Intersection

以下是这些函数的语法-

intersection list1 list2 &key :test :test-not :key 
nintersection list1 list2 &key :test :test-not :key

这些函数接受两个列表,并返回一个新列表,其中包含两个参数列表中存在的所有元素。

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

(setq set1 (intersection '(a b c) '(c d e)))
(setq set2 (intersection '(#(a b) #(5 6 7) #(f h)) 
   '(#(5 6 7) #(a b) #(g h)) :test-not #'mismatch)
)
       
(setq set3 (intersection '(#(a b) #(5 6 7) #(f h)) 
   '(#(5 6 7) #(a b) #(g h)))
)
(write set1)
(terpri)
(write set2)
(terpri)
(write set3)

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

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

来源:LearnFk无涯教程网

(C)
(#(A B) #(5 6 7))
NIL

Set Difference

以下是这些函数的语法-

set-difference list1 list2 &key :test :test-not :key 
nset-difference list1 list2 &key :test :test-not :key

Set Difference 函数将返回第一个列表中未出现在第二个列表中的元素的列表。

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

(setq set1 (set-difference '(a b c) '(c d e)))
(setq set2 (set-difference '(#(a b) #(5 6 7) #(f h)) 
   '(#(5 6 7) #(a b) #(g h)) :test-not #'mismatch)
)
(setq set3 (set-difference '(#(a b) #(5 6 7) #(f h)) 
   '(#(5 6 7) #(a b) #(g h)))
)
(write set1)
(terpri)
(write set2)
(terpri)
(write set3)

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

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

来源:LearnFk无涯教程网

(A B)
(#(F H))
(#(A B) #(5 6 7) #(F H))

祝学习愉快! (发现内容有误?请选中要编辑的内容 -> 右键 -> 修改 -> 提交!帮助我们改进教程质量)

精选教程推荐

👇 以下精选教程可能对您有帮助,拓展您的技术视野

AI原生应用入门课 -〔李梦冉/程默〕

Rust 语言从入门到实战 -〔唐刚〕

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

Web安全攻防实战 -〔王昊天〕

图解 Google V8 -〔李兵〕

Java业务开发常见错误100例 -〔朱晔〕

苏杰的产品创新课 -〔苏杰〕

程序员进阶攻略 -〔胡峰〕

AI技术内参 -〔洪亮劼〕

📝 好记忆不如烂笔头,留下您的学习笔记吧!

暂无学习笔记,成为第一个分享的人吧!

您的笔记将帮助成千上万的学习者