gpt4 book ai didi

format - 从格式调用完成输出

转载 作者:行者123 更新时间:2023-12-01 03:20:17 26 4
gpt4 key购买 nike

我注意到没有
format 指令将
调用 force-output / finish-output .

为什么?

它似乎在用户交互中很有用,参见。
Lisp format and force-output .

例如,~=可以翻译成 finish-output , 和 ~:=force-output .
我不认为 clear-output在这种情况下很有意义,但我们
可能 map ~@=为了完整性。

附注。参见CLISP RFE .

最佳答案

来自 comp.lang.lisp 的总结:

Steven Haflich 的解释

该语言没有定义可移植的方式来扩展格式集
指令(除了 ~/.../ ),但这并不是真正的问题。
真正的问题是在打印过程中在任意位置调用 finish-output 或类似函数的定义并不明确。

如果正在进行 pretty-print ,则接收到的流pprint-dispatchprint-object 方法可能是一个封装流——
一种暂时延迟输出直到它可以做出决定的
空格和换行符。 (也有潜在的问题,如果finish-output~< 理由中被调用,但该指令
是一个毛球!)如果被调用,人们会期望 finish-output 做什么
在 pretty-print 操作中?我不认为它定义得很好。

当然,问题不是特定于格式,而是针对finish-output from format 只会为
语。 finish-output 等只有在完全调用时才安全
在对 cl:write 的实际或隐含调用之外。将其作为函数调用
在代码中的适当位置(您知道执行不是
在嵌套写入中)所以意图很明确,你不会搞砸
打印机内部。

罗伯·沃诺克的建议

实际上,不需要对 format 进行任何更改。只需在 COMMON-LISP-USER package 的某处添加这个函数:

(defun fo (stream arg colon-p atsign-p &rest params)
(declare (ignore arg params))
(cond
(colon-p (force-output stream))
(atsign-p (clear-output stream))
(t (finish-output stream))))

然后:
(progn
(format t "enter var: ~/fo/" nil)
(read))
enter var: 456
456

这种(可移植!)方法的问题是
  • 冗长(~/fo/ 而不是 ~=)
  • 需要使用格式参数(上例中的 nil)
  • 关于format - 从格式调用完成输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45803936/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com