Common lisp 计算作为字符串包含的表达式

Common lisp 计算作为字符串包含的表达式,common-lisp,Common Lisp,我有一个数据库,它返回双引号内的有效CL表达式 是否可以将这些字符串转换为表达式 例如,我通过CLSQL从该数据库进行查询,结果它返回我: “(foo a b)” 如何将此表达式转换为: (fooab) 并进一步评估 > (read-from-string "(foo a b)") (FOO A B) ; 9 9是从字符串读取的产生的多个值中的第二个;您可以忽略它: (eval (read-from-string "(foo a b)")) 在给出正确定义的情况下,将执行您想要的操作

我有一个数据库,它返回双引号内的有效CL表达式

是否可以将这些字符串转换为表达式

例如,我通过CLSQL从该数据库进行查询,结果它返回我:

“(foo a b)”

如何将此表达式转换为:

(fooab)

并进一步评估

> (read-from-string "(foo a b)")
(FOO A B) ;
9
9
是从字符串读取的
产生的多个值中的第二个;您可以忽略它:

(eval (read-from-string "(foo a b)"))
在给出正确定义的情况下,将执行您想要的操作

* (read-from-string "(+ 1 2)")

(+ 1 2)
7
有一个安全问题。请参阅变量
*read eval*

* (read-from-string "#.(+ 1 2)")

3
9
您确实需要确保
*read eval*
NIL
,这样读取将不会对代码求值

* (let ((*read-eval* nil)) (read-from-string "#.(+ 1 2)"))

debugger invoked on a SB-INT:SIMPLE-READER-ERROR:
  can't read #. while *READ-EVAL* is NIL
另外,对来自数据库的任意输入调用
EVAL
不是一个好主意


通常,您希望确保代码只调用允许的函数。

谢谢,我怎么能找不到该函数?