lisp - format - 帮助打印表格

标签 lisp format

这个问题可能会以打脸告终,但我已经尝试了一段时间,尽管通读了 hyperspec,但仍然卡住了。

基本上我想做的是

(format t "~{|~{ ~5d~}|~%~}" '((1 23 2 312) (23 456 1 7890)))

但与其对 5 进行硬编码,不如从列表中计算它(任何嵌套列表中最长元素的长度 + 1)以给出类似于

|    1    23     2   312|
|   23   456     1  7890|      

也许我在这里想的太复杂了,有一种更简单的方法可以做我想做的事,但我认为我陷入了无法摆脱的精神困境。

最佳答案

我认为您有两个选择:让 format 魔法发挥作用并使用其他循环结构或自行生成格式字符串:

(defun facepalm-printer (lol)
  (format t (format nil "~~{|~~{ ~~~ad~~}|~~%~~}"
                    (longest-member lol))
          lol))

longest-member 的定义留给读者作为练习。

关于lisp - format - 帮助打印表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4618503/

相关文章:

lisp - 什么是 WITH-STANDARD-IO-SYNTAX 宏?

lisp - 重复调用格式忽略 ~t 选项

Excel:如何在日期格式的单元格上使用 LEFT 函数?

html - 页脚格式问题,可能是 CSS 问题?

file - 从 Common Lisp 中的文本文件中读取序列

list - LISP 需要一些帮助来解决一个 LIST 练习

lisp - 如何在 LISP 中将算术运算符作为函数参数传递?

c# - 如何使用兼容Android的C#读写NDEF格式的NFC标签?

lisp - Common Lisp - 打印在一行/返回/单行计数器/格式化

mysql - MySQL 中 GROUP_CONCAT 的对立面是什么?