是否REMOVE曾经在 Common Lisp 的任何实际实现中返回过相同的序列吗?规范表明它是允许的:
The result of remove may share with sequence; the result may be identical to the input sequence if no elements need to be removed.
例如,SBCL 似乎没有这样做,但我只做了一个粗略的(可能不充分的)测试,我想知道其他实现是做什么的。
CL-USER> (defparameter *str* "bbb") *STR* CL-USER> *str* "bbb" CL-USER> (defparameter *str2* (remove #\a *str*)) *STR2* CL-USER> (eq *str* *str2*) NIL CL-USER> *str* "bbb" CL-USER> *str2* "bbb"
最佳答案
返回原始字符串可能很有用。如果没有删除字符串的元素,则返回原始序列会阻止分配新序列。即使内部已经分配了一个新的序列,这个新序列也可能尽快变成垃圾。
例如 CLISP 返回原始字符串。
[1]> (let ((a "abc")) (eq a (remove #\d a)))
T
关于common-lisp - 实际上,REMOVE 会返回相同的序列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/721803/