在Common Lisp中将FUNCTION转换为STRING或SYMBOL

时间:2018-11-15 15:19:45

标签: function common-lisp symbols

常见的lisp是否可以将函数转换为符号或字符串以供进一步使用?我的意思是从"+"获得#:|+|#'+

3 个答案:

答案 0 :(得分:7)

唯一的标准方法是 function-lambda-expression 保证不能返回任何有用的信息。

无论如何,CLISP和SBCL都返回实际的函数名称:

(nth-value 2 (function-lambda-expression #'+))
==> +

或者,如果您愿意,

(symbol-name (nth-value 2 (function-lambda-expression #'+)))
==> "+"

答案 1 :(得分:4)

CL-USER> (nth-value 2 (function-lambda-expression #'sin))
SIN

答案 2 :(得分:0)

(defun function-name (fn)
  (string-downcase (symbol-name (nth-value 2 (function-lambda-expression fn)))))

(function-name #'atom) => "atom"