使用Common Lisp将文件读取到列表列表

时间:2014-11-03 17:35:21

标签: lisp common-lisp

我需要使用Common Lisp读取文本文件。必须将文件读取到列表列表。列表中的每个列表必须包含文件中的一行。

现在,我已经完成了这样的代码:

(with-open-file (in file)
  (loop for line = (read-line in nil nil)
        while line
        collect (coerce line 'list)))

但是,例如,rusult看起来像:((#\ 0#\ 0#\ 0)(#\ 1#\ 0#\ 1))。但我需要没有#\字符的结果:((0 0 0)(1 0 1))。如何解决?

1 个答案:

答案 0 :(得分:2)

您已将该行转换为字符列表; 您需要做的就是将字符转换为数字:

(with-open-file (in file)
  (loop for line = (read-line in nil nil)
    while line
    collect (map 'list #'digit-char-p line)))

您也可以使用(parse-integer (string c))代替digit-char-p,但这似乎有点矫枉过正。