Io 公共lisp格式:使用~/指令调用名称中带有斜杠的函数

Io 公共lisp格式:使用~/指令调用名称中带有斜杠的函数,io,format,common-lisp,Io,Format,Common Lisp,common lisp中的format函数有一个~/name/指令,允许您调用任意函数来格式化值。但是,根据文档,名称中不能有/。但是,#/是符号中的有效字符,因此是函数名。那么,有没有办法在传递给~//指令的函数名中转义#/ 用户定义的函数可以通过 使用指令~/name/。冒号修饰符,at符号修饰符, 并且可以使用~/name指定任意多个参数/ 指令。名称可以是不包含 "/". 名称中的所有字符都被视为大写字符 案例如果名称包含单冒号(:)或双冒号(::),则 所有达到但不包括第一个“:”或“

common lisp中的format函数有一个
~/name/
指令,允许您调用任意函数来格式化值。但是,根据文档,名称中不能有/。但是,#/是符号中的有效字符,因此是函数名。那么,有没有办法在传递给~//指令的函数名中转义#/

用户定义的函数可以通过 使用指令~/name/。冒号修饰符,at符号修饰符, 并且可以使用~/name指定任意多个参数/ 指令。名称可以是不包含 "/". 名称中的所有字符都被视为大写字符 案例如果名称包含单冒号(:)或双冒号(::),则 所有达到但不包括第一个“:”或“:”的内容都被带到 是命名包的字符串。第一次之后的所有内容:“或” “::”(如果有)被视为命名符号的字符串。这个 与~/name/指令对应的函数通过查找 在指定的包中向上填充具有指定名称的符号。如果 名称不包含“:”或“:”,则整个名称字符串为 在COMMON-LISP-USER包中查找

有很多符号,您将无法使用tilde slash指令调用;包含
\/
的符号只是其中一种。其他的是那些名字中有冒号的,或者是小写字母的。

不太可能

但是您可以编写一个具有合法名称的函数,该函数调用该函数,然后需要将该函数与参数一起传递。与此示例类似:

(defun foo (&rest args)
  (apply (first (second args))
         (first args)
         (second (second args))
         (cddr args)))

CL-USER 52 > (defun ba/r (&rest args) (print args))
BA/R

CL-USER 53 > (format t "~/foo/" '(ba/r (1 2)))

(#<LW-XP::XP-STRUCTURE 41C00D8B1B> (1 2) NIL NIL) 
NIL
(defun foo(&rest参数)
(应用(第一个(第二个参数))
(第一个参数)
(第二个(第二个args))
(cddr args)))
CL-USER 52>(定义ba/r和rest参数)(打印参数))
BA/R
CL-USER 53>(格式t“~/foo/”(ba/r(12)))
(#(12)零零零)
无
(defun foo (&rest args)
  (apply (first (second args))
         (first args)
         (second (second args))
         (cddr args)))

CL-USER 52 > (defun ba/r (&rest args) (print args))
BA/R

CL-USER 53 > (format t "~/foo/" '(ba/r (1 2)))

(#<LW-XP::XP-STRUCTURE 41C00D8B1B> (1 2) NIL NIL) 
NIL