将字符串列表转换为Common Lisp中的int列表

时间:2015-10-15 00:56:53

标签: lisp common-lisp

我有一行像“fun,arg1,arg2”< - 这是一个字符串

我通过“,”分隔符将此字符串拆分为字符串列表。然后我将“fun”与一些字符串(例如“Fibonacci”)进行比较。

拆分功能(工作正常)

(defun split-str (string &optional (r nil))
  (let ((n (position "," string
                     :from-end t
                     :test #'(lambda (x y)
                               (find y x :test #'string=)))))
    (if n
        (split-str (subseq string 0 n)
                   (cons (subseq string (1+ n)) r))
        (cons string r))))

测试功能

(defun tmp (a)
  (if (string= (nth 0 a) "Fibonacci")
    (progn
      (setf tab '())
      (dolist (n (cdr a))
        (cons tab '(parse-integer n))) ; parsing works fine (checked with write)
      (write tab)) ; always NIL
            ;(apply #'parse-integer (apply #'values a)) - doesn't work

    (write "nok")))

通话:

(tmp (split-str "Fibonacci,15,33"))

为什么我的标签没有2个元素?

1 个答案:

答案 0 :(得分:0)

cons并没有改变任何事情;它使用tab返回一个新列表。