我正在尝试使用下面的函数解析带有Common lisp的逗号分隔字符串。对于(separate-on-comma "a,b,c")
,我希望输出("a" "b" "c")
,但我得到("c" "c" "c")
。
我在这里想念什么?
(defun separate-on-comma (line)
(loop
with fields = ()
with field = (make-array 0 :element-type 'character :adjustable t :fill-pointer 0)
for x across line
when (char= x #\,)
do (push field fields)
and do (setf (fill-pointer field) 0)
else
do (vector-push-extend x field)
finally
(push field fields)
(return fields)))
感谢。
答案 0 :(得分:4)
您只使用一个字段数组。没关系。但是,当您将其推送到fields
列表变量时,最好将其复制。使用copy-seq
。
或者,将旧字段数组推到字段列表中后,创建一个新的字段数组。