I want
>(??? "car")
CAR
>((??? "car") '(1 2))
1
我似乎找不到一个能做到这个的函数。
I want
>(??? "car")
CAR
>((??? "car") '(1 2))
1
根据你想要做什么,有几种不同的选择。
首先是intern函数,如果已存在该名称的symbol,则返回该symbol,否则创建一个新的。
其次是find-symbol函数,如果存在该symbol,则返回该symbol,否则返回nil(该函数有两个返回值,第二个返回值可以用来区分“返回nil作为symbol”和“没有找到symbol返回nil”的情况)。
第三种选择是make-symbol函数,该函数总是创建一个新的未interned的symbol,几乎肯定不是你在这种情况下想要的。
你正在寻找这个吗?
(eval (read-from-string "(car '(1 2))"))
输出:1
更新:
那么 (funcall (intern "CAR") '(1 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
CL-USER 19 > (eval `(,(find-symbol "CAR") '(1 2)))
1
或者
CL-USER 20 > (eval (list (find-symbol "CAR") ''(1 2)))
1