Common Lisp 格式中可重复的差一问题

2024-01-22

I have format's tabs ~VT根据是否换行而表现不同~%位于行首或行尾,我想知道为什么。不同之处在于,当换行符位于行尾时,行中似乎有一个额外的空格仅一审制表位的。下面举例说明。示例中唯一的区别在于格式控制字符串:它是"~%~A~VT= ~A"在第一个例子中和"~A~VT= ~A~%"在第二。

示例 1:输出行开头的换行符

(let ((sb (make-array 0
                :element-type 'character
                :adjustable t
                :fill-pointer 0)))
           (mapcar (lambda (line)
                     (format sb "~%~A~VT= ~A" line 10 42))
                   '(a abcd asdf foobar g november))
           sb)
"
A        = 42
ABCD     = 42
ASDF     = 42
FOOBAR   = 42
G        = 42
NOVEMBER = 42"

这里的行为符合预期。

示例 2:输出行末尾的换行符

在这个例子中需要注意的是第一行,

A         = 42

其中比示例 1 中的相应行多一个空格:

A        = 42

由于前面有双引号,所以有点难以看到,这就是我将其删除的原因:以帮助您更好地看到它们。 这在更大的示例上是可重复的,并且是从更大的程序中剥离出来的 MVE。

(let ((sb (make-array 0
                :element-type 'character
                :adjustable t
                :fill-pointer 0)))
           (mapcar (lambda (line)
                     (format sb "~A~VT= ~A~%" line 10 42))
                   '(a abcd asdf foobar g november))
           sb)
"A         = 42
ABCD     = 42
ASDF     = 42
FOOBAR   = 42
G        = 42
NOVEMBER = 42
"

最重要的问题是“为什么?”我在 Mac 上使用 SBCL 1.3.1,尚未在其他实现上尝试过。这可能是一个错误,但似乎更合理的是它的预期行为,但我不明白它的目的是什么,而且我无法在格式的文档中找到解释。


我认为这是一个错误。我还可以使用 SBCL 1.3.1 在 Linux 上重现它。

~T在某些情况下可能需要启发式(可能会失败)来确定当前列,但我猜字符串的开头应该被视为第 0 列。

至少在我的电脑上,当一个简单的操作时似乎不会发生with-output-to-string用来:

(with-output-to-string (s)
  (mapcar (lambda (line)
            (format s "~A~VT= ~A~%" line 10 42))
          '(a abcd asdf foobar g november)))

但是,当您将预制字符串提供给with-output-to-string:

(let ((sb (make-array 0
                      :element-type 'character
                      :adjustable t
                      :fill-pointer 0)))
  (with-output-to-string (s sb)
    (mapcar (lambda (line)
              (format s "~A~VT= ~A~%" line 10 42))
            '(a abcd asdf foobar g november))
    sb))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Common Lisp 格式中可重复的差一问题 的相关文章

  • Common Lisp 整数到十六进制的转换

    是否有一个与 parse integer ff radix 16 类似的函数可以让我以另一种方式返回 如果我有 int 255 如何将其转换为字符串 ff write to string 255 base 16
  • (撰写)Common Lisp

    我们在 P Graham 的 ANSI Common Lisp 第 110 页 中找到了这个函数构建器来实现组合 参数是 n gt 0 带引号的函数名称 我不完全理解它 所以我将在这里引用代码并在下面指出我的问题 defun compose
  • Common Lisp 中有停止解释器的命令吗?

    我正在寻找一个表达式 它会导致解释器在求值时退出 我发现了很多特定于实现的内容 但在 HyperSpec 中没有找到 我想知道是否有一些我在规范中没有看到的定义 我发现 quit 被 CLISP 和 SLIME 认可 并且 exit 仅被
  • 使 clos 对象可在 lisp 中打印

    如果你想让 common lisp 中的 CLOS 对象可打印 可读打印 你如何在不使用除了 print 和 read 之外的任何东西的情况下做到这一点 至少在我的解决方案中 有两个部分可以做到这一点 但是您将需要这个功能 感谢 cl pr
  • LISP - 小数点后的数字

    有谁知道如何在 Lisp 中指定浮点数小数点后的位数 假设我在 REPL 上打印此命令 CL USER 3 gt format t 15f float 1 7 I get 0 142857150000000 但是该数字四舍五入到小数点后第
  • Common Lisp 案例和引用元素

    我正在用 CL 编写一个地下城爬行游戏 但在处理案例表单时遇到了问题 两件事情 Common Lisp 抱怨Duplicate keyform QUOTE in CASE statement make instance cl rogue t
  • LISP:关键字参数,提供-p

    目前我正在学习 Peter Seibel 的 Practical Common Lisp 在 实用 一个简单的数据库 一章中 http www gigamonkeys com book practical a simple database
  • Common Lisp 中的 LET 与 LET*

    我理解 LET 和 LET 并行绑定与顺序绑定 之间的区别 并且作为理论上的问题 它非常有意义 但有没有什么情况你曾经真正需要过 LET 在我最近查看的所有 Lisp 代码中 您可以将每个 LET 替换为 LET 而无需进行任何更改 编辑
  • CLISP - 反转简单列表

    我必须反转简单 单维 列表的元素 我知道有一个内置的反向函数 但我不能用它来做这个 这是我的尝试 defun LISTREVERSE LISTR cond lt length LISTR 2 LISTR listr is 1 atom or
  • Common Lisp 中的(随机)不那么随机?

    好的 最后一个问题 我将用 Common Lisp 完成我的猜数游戏 D 每当游戏开始 或者在第一个游戏之后开始新游戏 时 都会调用以下函数 Play the game defun play If it s their first time
  • let* 和 set 之间的区别?在 Common Lisp 中

    我正在从事一个基因编程爱好项目 我有一个函数 宏设置 当以 setq setf 形式评估时 将生成一个如下所示的列表 setq trees make trees 2 gt x abs x 然后它将绑定到 lambda 函数
  • 用通用函数替换普通函数

    我想将 elt nth 和 mapcar 等名称与我正在原型设计的新数据结构一起使用 但这些名称指定普通函数 因此我认为需要将其重新定义为通用函数 重新定义这些名称可能是一种不好的形式 有没有办法告诉 defgeneric 不要生成程序错误
  • 对于案例,这些表达案例的方法中哪种最好?

    这些都有效 defun testcaseexpr thecase case thecase foo format t matched foo bar format t matched bar funk format t matched fu
  • Lisp 格式和强制输出

    我不明白为什么这段代码在不同的实现中表现不同 format t asdf setq var read 在 CLISP 中 它的行为与预期一致 先打印提示 然后读取 但在 SBCL 中 它显示 then输出 我在网上查了一下 修改了一下 fo
  • 在我的 Linux 机器上安装 lisp

    我使用 Vim 作为我的编辑器 Practical common Lisp 建议安装 Lispbox 我不知道如何使用 emacs 不知道如何用那个 T T 运行 lisp 代码 之后我找到了一个名为 limp vim 的 vim lisp
  • 修改功能;保存到 Lisp 中的新函数

    所以我认为 lisp 在其他语言中 的优点之一是它能够实现函数工厂 接受函数作为参数 返回新函数 我想使用此功能对函数进行小的更改并将其保存为新函数 这样如果对原始函数进行更改 它们也会反映在它所基于的新函数中 注意 我不是编写原始函数的人
  • SLIME 和 SWANK 入门:Lisp 连接意外关闭:连接被远程对等点断开

    我试图使用 slime connect 函数通过 sbcl 访问远程服务器 我遵循了 slime mov 电影中的所有步骤马可 巴林格 http www guba com watch 30000548671但在为 slime 创建 ssh
  • 如何定义所有成员均为给定类型的列表

    我对 CL 类型系统有点陌生 但我认为像下面这样的东西可以工作 deftype list of type labels check all l every lambda item typep item type l and list sat
  • 在 cl-mongo 中实现 MongoDB SASL 身份验证

    我已经从 fons 分叉了 cl mongo common lisp MongoDB 库 存储库 因为它已经不再维护并且不支持 SCRAM SHA 1 登录过程 这是我的叉子 https github com mprelude cl mon
  • 关于onlisp中的广义变量

    我不确定这里发生了什么 文中的宏观示例 基本上不知道如何使用get setf 方法 一个内置宏 也许是函数 具体来说 如果某些返回值是这样的情况呢 get setf 方法为零 例如 get setf 方法 x NIL NIL NEW 306

随机推荐

  • 设计帮助 – 多态事件处理

    设计问题 多态事件处理 我目前正在尝试减少当前项目中事件句柄的数量 我们有多个通过 USB 发送数据的系统 我目前有一个例程来读取消息并解析初始标头详细信息以确定消息来自哪个系统 标头有点不同 因此我创建的 EventArgs 不一样 然后
  • 通过 Oauth 以编程方式从 Gmail 注销

    我有一个网站 我使用 Oauth 将用户登录到 Gmail 然后检索他们的联系人和其他信息 我需要做什么才能确保当用户注销我的网站时 他也会自动从 Gmail 注销 据我所知 OAuth 中没有注销功能 您只需停止在应用程序和 Gmail
  • 如何使用 AngularJS 更新/编辑数据库中的数据

    在开发网络应用程序时 我刚刚添加了以下更新代码 但它不起作用 以下所有代码的摘要是 单击名为的按钮update 它会显示表格 其中应包含单击 当前产品的值 现在 当我以这种形式点击 保存 时 它应该更新数据库 但事实并非如此 我在用 GET
  • Files.createDirectory() :FileAlreadyExistsException

    我在使用 Java 7 时遇到了一个看似奇怪的问题Files班级 我想在开始编写之前确保我的目录和文件存在 以避免FileNotFoundException 并根据Javadocs http docs oracle com javase 7
  • 带线程的 Python 超时上下文管理器

    I have timeout上下文管理器与信号完美配合 但在多线程模式下会引发错误 因为信号仅在主线程中工作 def timeout handler signum frame raise TimeoutException contextma
  • Django Rest框架-调用另一个基于类的视图

    我仔细研究了几个类似的帖子 并且从同一项目中的另一个应用程序调用应用程序的基于类的视图 https stackoverflow com questions 46606247 calling a class based view of an
  • shell脚本-检查mongodb服务器是否正在运行

    我有一个 shell 脚本来执行一些 mongo db 操作 e g mongo testdb eval db dropDatabase 但是 如果 mongodb 服务器没有运行 我会得到 MongoDB shell version 2
  • 访问 WPF DataGrid“空”或“行列”标头

    我试图访问 Net3 5 WPF DataGrid 中行标题和列标题交叉处的标题 乔什 史密斯 Josh Smith 在有关不同网格控件的文章中将其称为 空标题 我将其称为 RowColumn 标题 因为它位于列标题和行标题的第一个位置 并
  • 使用 Beta API 创建新会议时出现“onlinemeeting 不能为空”错误

    我正在尝试创建一个新会议文档 https developer microsoft com en us graph docs api reference beta api application post onlinemeetings POS
  • location.href 不起作用

    我早些时候使用过 location href 但现在它没有重定向到页面 这是我的代码 function AuthenticateUserWithPage var UId amwayId val username var UPw amwayP
  • Eclipse - Galileo IDE 在构建之前强制保存更改的文件?

    当我使用以前版本的 Eclipse 例如 Ganymede Europa 时 如果我编辑了一个文件然后尝试构建 Eclipse 会提示我先保存 由于我更新到 Galileo 构建 ID 20090920 1017 并刚刚检查更新 当我构建时
  • 如何使用 font-awesome 在 angular5 视图中显示评论星星

    我在数据库中有评论星级值 例子2 5对于一个项目 我想使用 font awesome 在模板中显示它 ul class rating inline ul li i class fa fa star amber text i li li i
  • 为什么GPU做矩阵乘法比CPU更快?

    我已经使用 GPU 一段时间了 没有质疑它 但现在我很好奇 为什么GPU做矩阵乘法比CPU快很多 是因为并行处理吗 但我没有写任何并行处理代码 它自己会自动完成吗 任何直觉 高级解释将不胜感激 如何并行计算 GPU 能够进行大量并行计算 比
  • 未找到 DNN 库。 (谷歌合作实验室)

    我正在开发一个 ML 项目 使用 Google Colab 和 Tensorflow 来训练 CNN 从 EfficientNetV2M 模型开始 它曾经工作得很好 直到两天前开始训练时 train model fit X y epochs
  • 在 MATLAB R2018a 及更高版本中将复数转换为实数,无需数据复制

    Since MATLAB R2018a https www mathworks com help releases R2018a matlab matlab external do i need to upgrade my mex file
  • 通过 Python 使用 BeautifulSoup 库

    我正在学习有关使用 Python 和 Beautiful Soup 库创建地图的教程 我已经下载了 beautiful soup 该文件夹名为 beautifulsoup4 4 1 3 该文件夹的内容在附图中 在教程中 我使用以下代码来导入
  • ASP.NET MVC html 帮助程序可以渲染没有 ID 属性的元素吗?

    假设我想在 ASP NET MVC 2 中生成与此类似的元素 是否有重载或方法可以让 ASP NET MVC 2 仅生成名称属性而不生成 ID 属性 我可以让它生成一个空白 ID 但我想生成根本没有 ID 的元素 并且不重写 asp net
  • 如果不满足两个条件,则拒绝或循环用户输入

    我是一个真正的 Python 初学者 尽管到目前为止我很喜欢它的每一分钟 我正在制作一个小程序 它接受用户输入 然后用它来做一些事情 我的问题是用户输入的数字必须 1 所有加起来不超过 1 即 a1 a2 a3 leq 1 2 每个单独 这
  • 回滚进化

    这个问题可能看起来很愚蠢 但我找不到任何关于如何在 Play 2 0 中回滚进化的说明 谷歌只找到说进化文件的 Downs 部分用于此目的的页面 仅此而已 任何指示或指示将不胜感激 The Downs部分主要用于在脚本更改时恢复 Evolu
  • Common Lisp 格式中可重复的差一问题

    I have format s tabs VT根据是否换行而表现不同 位于行首或行尾 我想知道为什么 不同之处在于 当换行符位于行尾时 行中似乎有一个额外的空格仅一审制表位的 下面举例说明 示例中唯一的区别在于格式控制字符串 它是 A VT