从字符串中的名称开始的常见lisp加载包

时间:2014-05-19 19:39:51

标签: lisp common-lisp clisp

我在http://www.fractalconcept.com/fcweb/download/modlisp-clisp.lisp使用mod_lisp和modlisp-clisp.lisp文件。我想根据server-id字段加载不同的包,这样我就可以设置不同的站点了。我试图用

做到这一点
(server-id:fetch-content request)

带有server-id引用和未引用,但找不到包。一些文件搜索发现我找到了包,但是当我做的时候

((find-package server-id):fetch-content request)

它说

(FIND-PACKAGE SERVER-ID) should be a lambda expression.

如何将包名称作为字符串加载包?

2 个答案:

答案 0 :(得分:1)

如果要在调用函数时使用不同的符号,则必须计算它们。

(funcall (find-symbol (compute-the-name) (compute-the-package))
         arg1 ... argn)

请注意,包名和符号名通常都是大写字符串。

CL-USER 6 > (funcall (find-symbol "EXPT" "CL") 3 4)
81

请注意,您不应让网络上的用户指定任意函数和参数,然后在不进行错误检查的情况下调用这些函数和参数。

答案 1 :(得分:0)

Common Lisp packages是其他系统调用的namespaces

您必须使用loadrequire - 或文档指示您做的任何事情 - 来提供所需的功能(包括软件包和功能)。

将代码加载到Lisp后,您可以使用list-all-packages查看现在可用的软件包。