Common lisp Format指令或一行代码截断长字符串?

Common lisp Format指令或一行代码截断长字符串?,common-lisp,Common Lisp,我的用例是将列表列表打印为一个表,列长度相等,因此我希望截断长输入。有这样做的指令吗?可能是带有~[条件的一行程序 ~a的参数允许用空格填充: (format t "~10a***" "aaa") aaa *** ;; aaa *** 长输入完全打印: (format t "~10a***" "aaaaaaaaaaaaaaaaa") ;; aaaaaaaaaaaaaaaaa*** 因此,我这样做,借助于“开始”和“结束”可以大于列表而不会抛出错误(与s

我的用例是将列表列表打印为一个表,列长度相等,因此我希望截断长输入。有这样做的指令吗?可能是带有
~[
条件的一行程序

~a
的参数允许用空格填充:

    (format t "~10a***" "aaa")
aaa       ***
    ;; aaa       ***
长输入完全打印:

(format t "~10a***" "aaaaaaaaaaaaaaaaa")
;; aaaaaaaaaaaaaaaaa***
因此,我这样做,借助于“开始”和“结束”可以大于列表而不会抛出错误(与subseq相反):

我不希望format能够在被截断的字符串中添加省略号(
),但这很好

我没有在快速参考或搜索中找到我要找的内容


谢谢!

我不知道,但您当然可以自己编写并与一起使用。

现在还有
str:prune-length-string
,它接受一个
:省略号
参数来告诉您如何剪切字符串:

(mapcar (lambda (tuple)
                       (format t "~10a | ~10a~&" 
                               (str:prune 10 (first tuple) :ellipsis "…")
                               (str:prune 10 (second tuple) :ellipsis "…")))
                     mylist)
header a   | header b  
col a      | col b     
much long… | much long…
我们可以使用
v
指令来避免重复太多的列长度:

(defparameter *col-length* 10)

(mapcar (lambda (tuple)
           (format t "~va | ~va~&" 
                     *COL-LENGTH*
                     (str:prune *COL-LENGTH* (first tuple) :ellipsis "…")
                     *COL-LENGTH*
                     (str:prune *COL-LENGTH* (second tuple) :ellipsis "…")))
       mylist)
header a   | header b  
col a      | col b     
much long… | much long…

我们可以使用
(let((str:*省略号*“…))

(defparameter *col-length* 10)

(mapcar (lambda (tuple)
           (format t "~va | ~va~&" 
                     *COL-LENGTH*
                     (str:prune *COL-LENGTH* (first tuple) :ellipsis "…")
                     *COL-LENGTH*
                     (str:prune *COL-LENGTH* (second tuple) :ellipsis "…")))
       mylist)
header a   | header b  
col a      | col b     
much long… | much long…