如何在Lisp格式函数中打印空白字符?
我希望有人能帮我解决这个问题,因为我找不到任何有用的答案,而且我还不熟悉Lisp 我要做的是测试一个元素的值,如果它是1,则打印它,否则打印空白字符。 当所有列表参数的值均为1时,此选项有效:如何在Lisp格式函数中打印空白字符?,lisp,whitespace,Lisp,Whitespace,我希望有人能帮我解决这个问题,因为我找不到任何有用的答案,而且我还不熟悉Lisp 我要做的是测试一个元素的值,如果它是1,则打印它,否则打印空白字符。 当所有列表参数的值均为1时,此选项有效: (defun print-lst (list) (format t "~%~a ~a ~a~%" (if (= (nth 0 list) '1) '¦) (if (= (nth 1 list) '1) 'P
(defun print-lst (list)
(format t "~%~a ~a ~a~%"
(if (= (nth 0 list) '1)
'¦)
(if (= (nth 1 list) '1)
'P)
(if (= (nth 2 list) '1)
'¦)))
因此,输出为p
。但是,如果列表中的第二个元素是0,它在该位置打印NILNIL
,我希望它打印一个空格,而不是alpha
(不仅仅是跳过该字符alpha
,如果测试值不是1,则在输出行的该位置有一个空白字符很重要)
如果未满足条件(如果(=(第n个列表)'1)'p)
,是否有任何方法返回空白字符,或者是否有其他方法执行此操作?
我希望我解释得很好。谢谢。
如果
接受三个参数:条件,然后是形式,否则是形式;else表单是可选的。此外,我会对文字字符使用文字字符语法
(if (= (nth 0 list) 1)
#\P
#\Space)
文件:
- 反问题:
您真的需要标识符(“某物”)的输出值,还是字符串文本也可以(“某物”)的输出值 如果第一个是真的:我想不可能使用空格作为标识符。
如果第二个为真:使用“|”、“P”和“”作为输出值
也就是说,看起来您可能希望在这里使用它的一些更高级别的指令。查看Lisp Hyperspec的一节和(特别是,查看处理条件格式的一节)。如果您想充分利用
格式的强大功能,可以使用格式条件和格式转到的组合
像这样:
[1]> (format nil "~@{~:[<nothing>~;~:*~A~]~^ ~}" 1 2 nil 4 nil 6)
"1 2 <nothing> 4 <nothing> 6"
这通过执行以下操作来实现:
~&
插入新行,除非我们已经在一行的开头
~@{…~}
以迭代方式处理参数
~:[…~;…~]
在nil
和非nil
案例之间进行选择
~:*
取消使用~:[…~]
使用的参数
~A
输出正在处理的项目
~^
在最后一次迭代时从循环中转义(以免在最后一项之后输出过多的空间)
谢谢,这很有帮助。我知道一个事实,若语句包含3个参数,我只是不知道如何生成空格字符,但看起来很简单(我是Lisp的新手)。有用的链接,我肯定会查看它们。谢谢。@BojanZdravkovic:顺便说一句,你不需要引用字面形式,因为它们会自行计算。这很酷。:)我第一次使用这个功能,现在我看到它有很多选择,它非常强大。:)哇!这正是我想要的。我不可能一个人就知道。谢谢。您可以使用(第一个列表)
、(第二个列表)
和(第三个列表)
来代替第n个列表。不需要引用像1
这样的原子,它们已经对自己进行了计算。此外,除非您真的需要,否则不要使用数字相等(=(第三个列表)1)
不仅在(第三个列表)
包含1时为真,而且在它包含浮点值1.0时也为真。此外,如果(第三个列表)
包含一个非数字,则会出现错误情况。这就是你想要的吗?@Kaz:我知道这一切。这只是一个学校项目,列表参数不会包含浮点或非数值,只包含整数1或0。
(format t "~&~@{~:[ ~;~:*~A~]~^ ~}"
...)