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