You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lisp中使用format格式化数组时避免自动换行与缩进?

解决Lisp format函数~s指令自动换行缩进的问题

禁用自动格式的方法

当使用~s指令打印数组时,它默认会启用美化格式(带换行和缩进)。要禁用这种行为,有两种常用方法:

方法1:手动遍历序列输出

使用~{~s~^ ~}的格式组合,手动遍历数组元素并拼接输出:

(let ((value #("a800150c-fed9-4c2a-9de4-c34dbe5b9f83"
               "a99c023a-5d29-40cc-ad49-1745d3e2bfe4"
               "f65dff1f-3719-41f5-9735-6ef77c5816b8"
               "c463d1a3-f17b-4e8a-a246-a0cc1805c8cf")))
  (format nil "#(~{~s~^ ~})" value))

各部分作用:

  • ~{ ... ~}:遍历数组(或序列)中的每个元素
  • ~s:将单个元素格式化为标准Lisp可读表达式
  • ~^ ~:在元素之间添加空格,最后一个元素后不追加
  • 外层#(...)手动包裹,还原数组的标准表示形式

方法2:临时禁用美化输出

通过局部绑定*print-pretty*变量为nil,临时关闭全局美化格式:

(let ((value #("a800150c-fed9-4c2a-9de4-c34dbe5b9f83"
               "a99c023a-5d29-40cc-ad49-1745d3e2bfe4"
               "f65dff1f-3719-41f5-9735-6ef77c5816b8"
               "c463d1a3-f17b-4e8a-a246-a0cc1805c8cf")))
  (let ((*print-pretty* nil))
    (format nil "~s" value)))

注意:*print-pretty*是全局变量,建议在let块内局部修改,避免影响其他代码的输出格式。

format指令参考内容

Common Lisp官方标准中的format函数章节是最权威的参考方向,重点关注:

  • 基础指令语法与修饰符规则
  • 序列遍历相关的~{、~}指令用法
  • 控制输出格式的全局变量(如*print-pretty*、*print-length*等)

内容的提问来源于stack exchange,提问作者Oliver Cox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:55:07