gpt4 book ai didi

lisp - 写入文件 Common Lisp

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:25 24 4
gpt4 key购买 nike

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

(((1 2) (3 4) (5 6)) ((7 8) (9 0)))

我必须将它写在一个文件中,其中每个列表列表中的数字都打印在一行中,如下所示:

.......
1 2 3 4 5 6
7 8 9 0
......

...... 意味着我可以有更多列表列表。我想知道如何在不使用循环和使用 with-open-fileformat 和递归的情况下实现它。每个数字之间有一个空格或制表符,子列表的每个列表都开始一个新行。谢谢

编辑:

我已经设法在与此代码相同的行上打印 (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))

但是我无法将 (((a b) (b c)) ((c d) (d e))) 的每个子列表打印到不同的行。

最佳答案

我想你可以使用 labels 创建一个辅助函数在 with-open-file 的主体内,因此它可以访问流。

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

因为这看起来像是家庭作业,所以我不会再详细说明了,但是制作了几个带有标签的函数来做不同的事情,比如 flattenprint-linesprint-elements 使代码更易于阅读和更改。

关于lisp - 写入文件 Common Lisp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44544075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com