【问题标题】:Formatting a list格式化列表
【发布时间】:2011-05-20 15:35:37
【问题描述】:

我有以下列表:(X X O NIL NIL O NIL NIL O)

我想将其格式化为如下所示:

X | X | O
--+---+--
  |   | O
--+---+--
  |   | O

我可能会用我对 Lisp 和FORMAT 知之甚少的东西拼凑出一些东西,但这可能会很恶心。任何指针将不胜感激。

【问题讨论】:

  • 就这么做吧。一旦你有一个可以工作的版本,就不要担心修复粗糙。

标签: lisp format common-lisp


【解决方案1】:
* (format t "~{~A | ~A | ~A~%~^--+---+--~%~}"
    (mapcar (lambda (x) (or x " ")) '(X O X NIL X X O X NIL)))
X | O | X
--+---+--
  | X | X
--+---+--
O | X |
NIL

上面对格式字符串的一点解释。这里的关键是 '~{' '~}' 和 '~^'。一对匹配的波浪号大括号将一个列表作为输入参数并对其进行迭代。如果被迭代的列表为空,则 ~^ 控制从该循环中提前退出。 相关文档~{~^

【讨论】:

    【解决方案2】:
    * (format t "~{~A | ~A | ~A~%~^--+---+--~%~}"
        (mapcar (lambda (x) (or x " ")) '(X O X NIL X X O X NIL)))
    X | O | X
    --+---+--
      | X | X
    --+---+--
    O | X |
    NIL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-20
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      相关资源
      最近更新 更多