我有两个简单数组,其中元素类型是'(无符号字节8)。如果我使用(concatenate 'vector array-A array-B)
,结果数组的元素类型将不再是#(无符号字节8)。
如何连接数组并将其元素类型保存在Lisp中?
答案 0 :(得分:6)
正如Rainer Joswig在评论中指出的那样,你可以简单地指定结果向量的元素类型:
(concatenate '(vector (unsigned-byte 8)) array-A array-B)
请注意documentation说:
如果 result-type 是vector的子类型,那么如果执行 可以确定为结果类型指定的元素类型 结果数组的元素类型是升级的结果 元素类型。
因此,您的LISP实施可以自由选择更好的"结果向量的元素类型(例如,如果指定类似(unsigned-byte 5)
的内容,则可能会发生这种情况)。
答案 1 :(得分:5)
你可以尝试做类似这样的事情来返回与第一个数组相同类型的数组:
(concatenate (type-of array-A) array-A array-B)
不幸的是,这不会很好用,因为类型可能包含数组的长度,你可能需要更长的数组。
如果你愿意失去一点普遍性,你可以选择:
(concatenate `(vector ,(array-element-type array-A)) array-A array-B)
这将返回一个与array-A
具有相同元素类型的向量,无论可能是什么。