我希望有人能帮我解决这个问题,因为我找不到任何有用的答案,而且我是 Lisp 的新手。

我想要做的是测试一个元素的值,如果它是 1 就打印一些东西,否则打印空白字符。
当所有列表参数的值都为 1 时,这会起作用:

(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,它会在那个地方打印 NIL ¦ NIL ¦ 并且我希望它打印一个空格而不是 ¦ ¦ (不仅仅是跳过那个字符 ¦¦ ,重要的是在那个位置有一个空白字符如果测试值不是 1),则输出行。

如果条件 (if (= (nth 1 list) '1) 'P) 不满足,有没有办法返回一个空白字符,或者有没有其他方法可以执行此操作?
我希望我解释得很好。谢谢你。

最佳答案

If 接受三个参数:condition、then-form、else-form; else 形式是可选的。此外,我会对文字字符使用文字字符语法。

(if (= (nth 0 list) 1)
    #\P
    #\Space)

文档:
  • Special form if
  • Character syntax
  • Character names
  • 关于lisp - 如何在 Lisp 格式函数中打印空白字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10351055/

    10-13 04:48
    查看更多