在 lisp 中解析逗号分隔的字符串

Parsing a comma separated string in lisp

我正在尝试使用以下函数使用 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)))

谢谢。

您只使用一个 字段 数组。没关系。但是当你将它推送到 fields 列表变量时,你最好复制它。使用 copy-seq.

或者在将旧字段数组推入字段列表后创建一个新字段数组。