如何在常见的lisp中创建一个空序列?

时间:2009-12-24 16:38:23

标签: common-lisp

函数将序列作为参数。在函数中,我想创建一个相同类型参数的空序列。然后我将存储一些东西并返回它,使得返回类型与参数相同。但

如果参数是任何长度的列表或向量,

(make-sequence(参数类型 0 )将导致错误。

我目前的解决方案是: 1.使用空列表存储东西,我们称之为临时列表 2.(make-sequence(type-of 参数)(length temp-list)) 3.复制元素,然后返回

其他更好的解决方案?

2 个答案:

答案 0 :(得分:6)

返回相同类型的空序列

(subseq sequence 0 0)

答案 1 :(得分:1)

看起来它失败了,因为列表的类型是CONS,而不是LIST,而vector的类型有它的大小,你试图覆盖它。

您可以通过一些简单的规则转换type-of,例如:

(cond ((eq x 'cons) 'list)
      ((consp x) (car x))))

但是PUSH并没有真正用于向量,所以我不确定你想要做什么,无论如何:你需要一个列表来进行,然后转换,无论如何,对吧? / p>