是否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"
返回原始字符串可能很有用.如果没有删除字符串的元素,则返回原始序列会阻止分配新序列.即使在内部分配了新序列,这个新序列也可能会尽快变成垃圾.
例如,CLISP返回原始字符串.
[1]> (let ((a "abc")) (eq a (remove #\d a)))
T
Run Code Online (Sandbox Code Playgroud)