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

时间:2015-02-26 21:43:28

标签: lisp common-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)))

感谢。

1 个答案:

答案 0 :(得分:4)

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

或者,将旧字段数组推到字段列表中后,创建一个新的字段数组。