写在公共Lisp文件上

写在公共Lisp文件上,lisp,common-lisp,Lisp,Common Lisp,问题是:我有这样一个列表: (((1 2) (3 4) (5 6)) ((7 8) (9 0))) ....... 1 2 3 4 5 6 7 8 9 0 ...... 我必须把它写在一个文件中,每个列表中的数字都打印在这样一行中: (((1 2) (3 4) (5 6)) ((7 8) (9 0))) ....... 1 2 3 4 5 6 7 8 9 0 ...... ……意味着我可以拥有更多列表。我想知道如何在不使用循环和使用打开文件、格式和递归的情况下实现这一点。在每个数字之间有

问题是:我有这样一个列表:

(((1 2) (3 4) (5 6)) ((7 8) (9 0)))
.......
1 2 3 4 5 6
7 8 9 0
......
我必须把它写在一个文件中,每个列表中的数字都打印在这样一行中:

(((1 2) (3 4) (5 6)) ((7 8) (9 0)))
.......
1 2 3 4 5 6
7 8 9 0
......
……
意味着我可以拥有更多列表。我想知道如何在不使用循环和使用
打开文件
格式
和递归的情况下实现这一点。在每个数字之间有一个空格或制表符,子列表的每个列表开始一个新行。 谢谢

编辑:

我已成功地将
(a b)
的子列表打印在与此代码相同的行上:

(defun write_pfs (filename point)
  (with-open-file (str filename
                       :direction :output
                       :if-exists :append
                       :if-does-not-exist :create)
    (format str (format nil "~~{~~a~~^~C~~}~T" #\Tab) point)))


(defun write_points (filename points)
  (mapcar #'(lambda (x) (write_point filename x)) points))

但是我没有办法将
((ab)(bc))((cd)(de))
的每个子列表打印到另一行。

我想你可以在
的主体中使用打开的文件创建一个helper函数,这样它就可以访问流

(with-open-file (stream path :direction :output)
  (labels ((recursive-print (lst)
             ...)
           (flatten (lst acc)
             ...)
           ...)
    (recursive-print lst))))

由于这看起来像是家庭作业,我将不再详细说明,但是,使用标签制作多个函数,这些函数可以执行不同的操作,例如
展平
打印行
打印元素
使代码更易于阅读和修改。

我想你可以在
的主体中使用打开的文件
创建一个助手函数,这样它就可以访问流

(with-open-file (stream path :direction :output)
  (labels ((recursive-print (lst)
             ...)
           (flatten (lst acc)
             ...)
           ...)
    (recursive-print lst))))

由于这看起来像是家庭作业,我将不再详细说明,但是,使用标签制作几个函数,这些函数可以完成不同的任务,例如
展平
打印行
打印元素
使代码更易于阅读和修改。

到目前为止您尝试了什么?到目前为止您尝试了什么?