我有一个小而有趣的问题,但我不能找到一个完美的解决方案,如果你能帮助我或给我一个暗示,我将不胜感激。 问题是:
给出任何列表,比如'(a b c),我们会将其转换为'[a b c] 或'(a(b c)),我们将转换为'[A [B C]]
换句话说,该函数应该与LISP中的PRINT做同样的事情,除了我们将括号更改为方括号。但是简单地打印到字符串然后将括号替换为方括号的方法不计算。 请给我一些想法,谢谢。
答案 0 :(得分:2)
这是我的看法:
(defun bprint (object)
(typecase object
(cons
(write-char #\[)
(do ((list object (rest list)))
((endp list) (write-char #\]))
(bprint (first list))
(when (rest list)
(write-char #\Space))))
(t
(prin1 object)))
t)
即:遇到列表时,打印左括号,递归打印内容,必要时在对象后添加空格,然后打印结束括号。使用prin1打印所有非列表对象。 prin1是“生产可读输出”打印机。
答案 1 :(得分:0)
这是一本好书:Practical Common Lisp。
如果您赶时间,可能需要从这里开始:List Processing和Format Recipes