首页 > 解决方案 > 是否可以让 FORMAT 忽略未定义的格式指令?

问题描述

我想知道是否可以告诉 FORMAT 忽略未定义的格式指令。我查看了 CLHS 中 FORMAT 的页面,但我什么也没看到。

我想要做的是让 FORMAT~m在格式字符串中忽略并输出~m而不是尝试用某些东西替换它。我的计划是到那时我将调用另一个知道如何处理的函数~m

我想一个相关的问题是,有没有办法定义一个函数来处理一个未定义的格式指令?

期待一些问题。(1)我想一种解决方法是用占位符代替~m,然后再将其替换回去并继续。如果一切都失败了,我想我会这样做。(2) 我想另一种一般策略是先调用另一个函数,处理~m,然后在结果上调用 FORMAT。不幸的是,其他函数可以识别一些相同的指令,而对其他函数则不认可;它不仅识别~m并忽略其他所有内容。

标签: formatcommon-lisp

解决方案


您可以使用 ~/name/ 定义自己的格式指令,其中 name 是被调用函数的名称。在您的情况下,您将拥有:

(format t "~/m/" 1)

(defun m (stream n colon-mod at-mod) 
   (format stream "~a" n)) ; or do something else with n

您仍然需要更改控制字符串,但您可以添加一个预处理步骤,将“~m”替换为“~/m/”。


推荐阅读