lisp显示lentityp nil参数类型错误误:numberp:nil是哪里出现了错误呢?

Common Lisp不提供set数据类型。 但是,它提供了许多允许在列表上执行集合操作的功能。

您可以根据各种条件添加,删除和搜索列表中的项目。 您还可以执行各种设置操作,例如:union,intersection和set difference。

像列表一样的集合通常根据cons单元格来实现。 但是,由于这个原因,集合获得的集合越大,效率越低。

adjoin函数允许您构建一个集合。 它接受一个项目和一个表示集合的列表,并返回一个列表,该列表表示包含该项目的集合以及原始集合中的所有项目。

adjoin函数首先查找给定列表中的项目,如果找到,则返回原始列表; 否则它会创建一个新的cons单元格,其car作为项目, cdr指向原始列表并返回此新列表。

adjoin函数还包括:key:test关键字参数。 这些参数用于检查项目是否存在于原始列表中。

由于adjoin函数不修改原始列表,要在列表本身中进行更改,您必须将pushnew返回的值分配给原始列表,或者,您可以使用宏pushnew将项添加到集合中。

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

执行代码时,它返回以下结果 -

成员函数组允许您检查元素是否是集合的成员。

以下是这些函数的语法 -

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

这些函数可以用作谓词。

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

执行代码时,它返回以下结果 -

联合函数组允许您在两个列表上执行集合,这两个列表作为参数提供,作为测试的基础。

以下是这些函数的语法 -

union函数接受两个列表并返回一个新列表,其中包含任一列表中的所有元素。 如果存在重复,则只有该成员的一个副本保留在返回的列表中。

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

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

执行代码时,它返回以下结果 -

如果没有:test-not #'mismatch union :test-not #'mismatch三个向量列表的参数,union函数将无法正常工作。 这是因为,列表由cons单元组成,虽然值看起来与我们看起来相同,但是单元格的cdr部分不匹配,因此它们与LISP解释器/编译器不完全相同。 这就是原因; 不建议使用列表来实现大集合。

交集的函数组允许您在两个列表上执行交集,这些列表作为参数提供,作为测试的基础。

以下是这些函数的语法 -

这些函数采用两个列表并返回一个新列表,其中包含两个参数列表中的所有元素。 如果任一列表具有重复条目,则冗余条目可能会也可能不会出现在结果中。

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

执行代码时,它返回以下结果 -

交集函数是交集的破坏性版本,即它可能破坏原始列表。

set-difference函数组允许您在基于测试的两个列表上执行设置差异,这两个列表作为这些函数的参数提供。

以下是这些函数的语法 -

set-difference函数返回第一个列表中未出现在第二个列表中的元素列表。

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

执行代码时,它返回以下结果 -

我要回帖

更多关于 lentityp nil参数类型错误 的文章

 

随机推荐