Lisp在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
做个小测试, 发布于:2024-03-14 09:53 桥梁安全计算lisp 发布于:2023-10-24 09:36 定义函数 newCalc,接受两个参数 x 和 y 发布于:2023-09-23 16:06 判断两数之和大于第三个数 发布于:2023-09-01 16:21 分数陈述性知识 发布于:2023-08-24 22:27 CAD面积/体积计算 发布于:2023-04-19 12:08 测试lisp语言 发布于:2023-04-10 15:03 计算list中某一元素数量 发布于:2023-02-16 11:32 LISP 初体验 发布于:2021-08-11 13:16 XY坐标标注CAD插件 发布于:2021-06-11 15:25 format t 输出语句 发布于:2020-08-10 18:21 print 输出语句 发布于:2020-08-10 18:20 write 输出语句 发布于:2020-08-10 18:16 write-line 输出语句 发布于:2020-08-10 18:14 循环输出内容 发布于:2020-08-10 18:11 [更多]
显示目录

集合



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

集合

Common Lisp不提供的一组数据类型。然而,它提供的函数数量,它允许一组操作,以可以在列表上执行。

可以添加,删除和搜索列表中的项目,根据不同的标准。还可以执行像不同的集合运算:并,交和集合差。

实现LISP集合

集合像列表一样,一般实现的利弊单元。由于这个原因,集合操作越来越少,高效的获取大的集合。要明白这一点,一旦我们深入研究这个问题更深一点。

adjoin函数可建立一个集合。这需要一个条目和一个列表表示一组,并返回表示包含该项目,并在原设定的所有项目的集合列表。

adjoin函数首先查找的条目给定列表中,一旦找到,将返回原来的名单;否则,创建一个新的cons单元,其car作为该目条,cdr指向原来的列表并返回这个新列表。

该毗函数也需要:key 和 :test关键字参数。这些参数用于检查该条目是否存在于原始列表。

因为,adjoin函数不会修改原来的列表,让列表本身的变化,必须指定由adjoin到原始列表返回的值或者可以使用宏pushnew将条目添加到集合。

示例

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:

; creating myset as an empty list (defparameter \*myset\*  ())
(adjoin 1  \*myset\*)  (adjoin 2  \*myset\*)  ; 
adjoin didn't 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)

当执行代码,它返回以下结果:

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

当执行代码,它返回以下结果:

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

集合联合

联合组功能能够在作为参数提供给这些功能测试的基础上,两个列表进行集联合。

以下是这些函数的语法:

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

union函数有两个列表,并返回一个包含所有目前无论是在列表中的元素的新列表。如果有重复,则该成员只有一个副本被保存在返回的列表。

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

示例

创建一个名为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)

当执行代码,它返回以下结果:

(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))

请注意:

对于三个向量列表 :test-not #'不匹配的参数:如预期的union函数不会工作。这是因为,该名单是由cons单元元素,虽然值相同的外观明显,单元元素cdr部分不匹配,所以他们并不完全一样,以LISP解释器/编译器。这是原因;实现大集全不建议使用的列表。它工作正常的小集合上。

交集

函数的交点组允许作为参数提供给这些函数测试的基础上,两个列表进行交点。

以下是这些函数的语法:

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)

当执行代码,它返回以下结果:

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

intersection 函数是相交的破坏性版本,也就是说,它可能会破坏原始列表。

差集

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)

当执行代码,它返回以下结果:

(A B)  (#(F H))  (#(A B)  #(5 6 7) #(F H))
由JSRUN为你提供的Lisp在线运行、在线编译工具
        JSRUN提供的Lisp 在线运行,Lisp 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout