我在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.
如何将包名称作为字符串加载包?
答案 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。
您必须使用load
或require
- 或文档指示您做的任何事情 - 来提供所需的功能(包括软件包和功能)。
将代码加载到Lisp后,您可以使用list-all-packages
查看现在可用的软件包。