我想要
>(??? "car")
CAR
>((??? "car") '(1 2))
1
我似乎找不到这样做的功能。
答案 0 :(得分:9)
有一些,具体取决于你想要做什么。
首先,intern,这将返回该名称的现有符号(如果存在),否则将创建一个新符号。
第二,find-symbol,这将返回符号,如果它存在,则返回nil(它有两个返回值,第二个可用于区分“返回nil为符号”和“返回nil为”找不到符号“)。
第三,有make-symbol,这将始终创建一个新的,未加工的符号,几乎可以保证在这种特定情况下不是你想要的。
答案 1 :(得分:2)
你在找这个吗?
(eval (read-from-string "(car '(1 2))"))
给予:1
更新:
(funcall (intern "CAR") '(1 2))
怎么样? :)
答案 2 :(得分:2)
>(??? "car")
CAR
>((??? "car") '(1 2))
1
使用:
CL-USER 17 > (find-symbol "CAR")
CAR
:INHERITED
CL-USER 18 > (funcall (find-symbol "CAR") '(1 2))
1
请注意,符号名称在Common Lisp中是内部大写的。 FUNCALL允许我们将符号称为函数。也可以使用带有FUNCALL的函数对象。
你也可以创建一个表格并评估:
CL-USER 19 > (eval `(,(find-symbol "CAR") '(1 2)))
1
或
CL-USER 20 > (eval (list (find-symbol "CAR") ''(1 2)))
1