如何获取Lisp脚本中定义的函数名?

时间:2011-10-18 09:06:48

标签: java lisp

我有一个Lisp文件,其中定义了一些函数[(defun ...]。

是否有一种简单的方法可以使用Java在脚本中定义所有函数名称?

3 个答案:

答案 0 :(得分:1)

也许你可以使用A Small Lisp interpreter in Java

中的一些代码

答案 1 :(得分:0)

如果您想知道某个包中定义了哪些功能,您可以使用with-package-iterator宏。像这样:

(with-package-iterator (next (find-package 'test) :internal)
  (loop :for (more? sym) := (multiple-value-list (next))
        :if (fboundp sym) :collect sym :into rez 
        :else :unless more? :do (return rez)))

如果您只想从脚本(-file)中提取函数,最简单的方法似乎是使用正则表达式"\\(defun (.+)\\s"或类似的东西进行扫描。

答案 2 :(得分:0)

在非常简单的情况下,您可以使用正则表达式。在稍微不那么简单的情况下,实现S表达式读取器可能是一种合理的方法(您甚至可能完全忽略读取器宏)。但是,在一般情况下,特别是如果涉及宏,请考虑嵌入Armed Bear Common Lisp,它是Common Lisp的Java实现,并使用提到的with-package-iterator形式Vsevolod。