在Common Lisp中,是否可以将函数转换为符号或字符串以进行进一步使用?我的意思是从#'+
获取"+"
或#:|+|
。
在Common Lisp中,是否可以将函数转换为符号或字符串以进行进一步使用?我的意思是从#'+
获取"+"
或#:|+|
。
function-lambda-expression
,但它不能保证返回有用的信息。(nth-value 2 (function-lambda-expression #'+))
==> +
或者,如果你希望的话,
(symbol-name (nth-value 2 (function-lambda-expression #'+)))
==> "+"
CL-USER> (nth-value 2 (function-lambda-expression #'sin))
SIN
(defun function-name (fn)
(string-downcase (symbol-name (nth-value 2 (function-lambda-expression fn)))))
(function-name #'atom) => "atom"
FLET
/LABELS
/LAMBDA
定义的函数不会自动分配给符号(当然,您可以手动分配)。至少在SBCL上进行调试时,建议使用FUNCTION-LAMBDA-EXPRESSION
返回一个列表(FLET <name>)
/(LABELS <name>)
/(LAMBDA <lambda-list>)
,但这些当然不是实际的函数名称(即使将函数手动分配给符号函数槽,也会返回这些内容,这证明了"sds"所说的“不能保证返回任何有用的信息”)。 - jkiiski