我发现,如果行中包含的值为NIL,则很难对齐列
我尝试指定列宽,然而,在输出中,NIL似乎总是具有与其他unicode字符不同的宽度,因此总是不能正确对齐。有没有一种方法可以实现更好的对齐?(是的,我更喜欢将空列表打印为NIL)
谢谢。
(progn
(format t "~?" "~5@a ~5@a ~5@a ~5@a ~5@a~%" '(蘋果 () 桔子 () 西瓜))
(format t "~?" "~5@a ~5@a ~5@a ~5@a ~5@a~%" '(() 茄子 () 菠菜 () 苦瓜)))
OUTPUT (Column not aligned even column width has already been specified
蘋果 NIL 桔子 NIL 西瓜
NIL 茄子 NIL 菠菜 NIL
Would be expecting OUTPUT aligned like below (with NIL occupy the same width as specified) :
蘋果 NIL 桔子 NIL 西瓜
NIL 茄子 NIL 菠菜 NIL发布于 2020-09-17 14:52:14
我观察到从()到NIL的字符串格式为3个字符,而其他字符为2个字符,因此我尝试将()填充改为~6@a。事实证明,它的效果更好:
(length (format nil "~a" nil))
3
(progn
(format t "~?" "~5@a ~6@a ~5@a ~6@a ~5@a~%" '(蘋果 () 桔子 () 西瓜))
(format t "~?" "~6@a ~5@a ~6@a ~5@a ~6@a~%" '(() 茄子 () 菠菜 () 苦瓜)))
蘋果 NIL 桔子 NIL 西瓜
NIL 茄子 NIL 菠菜 NIL拉丁字符和非拉丁字符的宽度是不同的(具体见最后一列),但现在这两列看起来是对齐的。
因此,您必须预先计算每个条目的填充。
可以使用~v指令在指令中插入变量。
(let ((padding 30))
(format nil "~va" padding "foo"))
;; "foo "(来源:Cookbook)
https://stackoverflow.com/questions/63917093
复制相似问题