Common lisp 漂亮的打印换行,但不是额外的换行

Common lisp 漂亮的打印换行,但不是额外的换行,common-lisp,Common Lisp,有没有一种方法,使用漂亮的印刷机器,说这里需要一条新的生产线,但不能超过一条 我已经为注释添加了一个S-expression节点类型,我正在尝试让漂亮的打印机成功地输出它们。这是首选格式的示例输入 (defun f () ; a ; b z) 这是一次漂亮的印刷尝试 (set-pprint-dispatch `(cons (eql ,+comment+)) #'print-comment) 然后 (defun print-comment (*standard-output* a)

有没有一种方法,使用漂亮的印刷机器,说这里需要一条新的生产线,但不能超过一条

我已经为注释添加了一个S-expression节点类型,我正在尝试让漂亮的打印机成功地输出它们。这是首选格式的示例输入

(defun f ()
  ; a
  ; b
  z)
这是一次漂亮的印刷尝试

(set-pprint-dispatch `(cons (eql ,+comment+)) #'print-comment)
然后

(defun print-comment (*standard-output* a)
  (princ (cadr a)))
产生不正确的输出

(DEFUN F () ; a ; b Z)
因此,漂亮的打印机不知道评论需要在单独的行上,公平地说,我需要告诉它

(defun print-comment (*standard-output* a)
  (pprint-newline :mandatory)
  (princ (cadr a))
  (pprint-newline :mandatory))
然后得到这个输出

(DEFUN F ()

  ; a


  ; b

  Z)

这也不好。有没有办法告诉漂亮的打印机在没有额外换行符的情况下输出换行符?

您不能将format与
~&
指令一起使用,而不是princ和强制换行符?(
~&
如果已经有换行符,则不会打印换行符,与之相反,
~%
)@Ehvince我刚才试过了,但它仍然会打印额外的空行符。如果您使用
换行符
而不是
换行符
,该怎么办?另外,我不认为你真的希望在评论之前有一个强制性的换行。关于
(defun print comment(s a)(pprint逻辑块(s a:每行前缀“)”)
呢?@DanRobertson
fresh line
仍然打印多余的空行。@DanRobertson但是
每行前缀
似乎起到了作用。谢谢