"1 * 2 *-6ren">
gpt4 book ai didi

lisp - 打印带有中缀符号的列表

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:43 24 4
gpt4 key购买 nike

我想使用 format 将 s-expression 转换为带有中缀符号的字符串。如何使用 format 完成此操作?

例子;

(format t "<insert format controls here>" (1 2 3) '*)
=> "1 * 2 * 3"

最佳答案

此答案包含错误代码。

简单,只需使用 custom formatters :

(format t "~/acquire/~/disseminate/" '(1 2 3) '*)

它们的定义如下:

(let ((memory))
(defun cl-user::acquire (stream list &optional colonp atsignp)
(declare (ignore colonp atsignp stream))
(setf memory list))
(defun cl-user::disseminate (stream operator &optional colonp atsignp)
(declare (ignore colonp atsignp))
(format stream (concatenate 'string "~{~a~^ " (string operator) " ~}") memory)
(setf memory nil)))

例如:

CL-USER> (format t "~/acquire/~/disseminate/" '(1 2 3) '*)
1 * 2 * 3

memory 变量在两个函数的词法范围内,这使它们能够进行数据通信。第一个存储列表,第二个使用它。如果您从不调用第二个函数(或第一个函数为 nil),memory永远绑定(bind)到最后一个列表,这可能是个问题。另请注意,您可能会遇到并发问题。 坦率地说,这不是做你想做的最好的方法,但它可以完成工作 w.r.t.您的要求。

关于lisp - 打印带有中缀符号的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56585956/

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