在实践中,REMOVE是否会返回相同的序列?

Jac*_*son 3 common-lisp

是否REMOVE曾经在Common Lisp的任何真正实现返回相同的序列?规范建议允许:

删除的结果可以与序列共享; 如果不需要删除元素,则结果可能与输入序列相同.

例如,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"

Rai*_*wig 6

返回原始字符串可能很有用.如果没有删除字符串的元素,则返回原始序列会阻止分配新序列.即使在内部分配了新序列,这个新序列也可能会尽快变成垃圾.

例如,CLISP返回原始字符串.

[1]> (let ((a "abc")) (eq a (remove #\d a)))

T
Run Code Online (Sandbox Code Playgroud)