【问题标题】:Deep nested lists in LISP return # for a part of my listLISP 中的深层嵌套列表为我的列表的一部分返回 #
【发布时间】:2015-02-27 13:10:43
【问题描述】:

我是 LISP 的新手,正在尝试使用深层嵌套列表。 所有带有列表的基本函数,如 CONS 或 LIST 都不会给出正确的结果。他们用符号 # 替换列表的一部分。

例如:

(list '(1 (2 (3 (4 (5))))) '(6 (7 (8 (9 (10)))))))

=> ((1 (2 (3 #))) (6 (7 (8 #))))

有没有人想办法解决这个问题?

【问题讨论】:

    标签: lisp nested-lists


    【解决方案1】:

    您可以通过设置变量*print-level**print-length* 来调整打印内容的深度和长度。
    (看起来你的*print-level* 是 4。)

    完整的文档和示例在HyperSpec

    其中一个例子:

     (setq a '(1 (2 (3 (4 (5 (6))))))) =>  (1 (2 (3 (4 (5 (6))))))
     (dotimes (i 8) 
       (let ((*print-level* i)) 
         (format t "~&~D -- ~S~%" i a)))
    >>  0 -- #
    >>  1 -- (1 #)
    >>  2 -- (1 (2 #))
    >>  3 -- (1 (2 (3 #)))
    >>  4 -- (1 (2 (3 (4 #))))
    >>  5 -- (1 (2 (3 (4 (5 #)))))
    >>  6 -- (1 (2 (3 (4 (5 (6))))))
    >>  7 -- (1 (2 (3 (4 (5 (6))))))
    =>  NIL
    

    【讨论】:

      【解决方案2】:

      为了简洁起见,您看到的是连接的输出。实际的列表是正确的并且不受影响,但是因为打印到输出会太长,所以lisp REPL在打印时会缩短它并使用#表示它已经这样做了。

      【讨论】:

      • 感谢您的快速答复。还有一个问题:有什么办法可以看到完整的输出?需要检查结果是否正确
      • *print-circle* 设置为 nil 也可能会有所帮助,但只有在您确定没有循环结构共享时才这样做。
      猜你喜欢
      • 2015-01-17
      • 2022-11-04
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多