Common lisp 只输出一个空行

Common lisp 只输出一个空行,common-lisp,Common Lisp,“换行符”仅当我们尚未处于行的开头时才输出换行符,换句话说,它将转到下一行,但不会生成空行,换句话说,它最多输出一个连续的换行符 我需要一个函数,仅当我们还没有输出一个空行时才输出一个空行,换句话说,最多输出两个连续的换行符 或者换句话说,我正在寻找一个幂等空行函数,一个即使被多次调用也只输出一个空行的函数 最好的方法是什么?如果我正确理解您的问题,我认为您可以使用fresh line的以下属性查看: 如果输出换行符,fresh line返回true;否则返回false 要定义如下内容: (de

“换行符”仅当我们尚未处于行的开头时才输出换行符,换句话说,它将转到下一行,但不会生成空行,换句话说,它最多输出一个连续的换行符

我需要一个函数,仅当我们还没有输出一个空行时才输出一个空行,换句话说,最多输出两个连续的换行符

或者换句话说,我正在寻找一个幂等空行函数,一个即使被多次调用也只输出一个空行的函数


最好的方法是什么?

如果我正确理解您的问题,我认为您可以使用fresh line的以下属性查看:

如果输出换行符,fresh line返回true;否则返回false

要定义如下内容:

(defun my-fresh-line ()
  (unless (fresh-line)
    (terpri)))
(define blank-line ()
  (fresh-line)
  (terpri))
另一方面,如果您希望在当前书面文本后始终有一个空行,无论是否以新行结尾,您可以定义如下内容:

(defun my-fresh-line ()
  (unless (fresh-line)
    (terpri)))
(define blank-line ()
  (fresh-line)
  (terpri))

然后在当前输出后调用它。

在我们已经在行的开头的情况下,成功输出一个空行,因此新行返回false,但在另一种情况下,只转到行的开头,不输出空行?它输出一个新行,因为这是新行的行为,这被称为第一件事。如果您在任何情况下都需要一个空行,您只需调用fresh line,然后再调用ExpriRight,但我需要的是一个幂等空行函数,即使多次调用,也只输出一个空行。@rwallace,使用“换行”,您只能知道前一行是否以换行方式终止。如果fresh line返回T,则不知道是否已发出空行。要解决您的问题,应该保持全局状态,然后在必要时重置它。这是你想要的吗?