写在公共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))))
由于这看起来像是家庭作业,我将不再详细说明,但是,使用标签制作几个函数,这些函数可以完成不同的任务,例如展平
,打印行
和打印元素
使代码更易于阅读和修改。到目前为止您尝试了什么?到目前为止您尝试了什么?