Tag: lisp

如何让Lisp函数在知道包时调用java?

在Emacs中使用Lisp函数来运行当前文件对应的Java程序。 (defun java-run-current-file () “Runs the java program the current file correspond to” (interactive) (shell-command (concat “java ” (file-name-sans-extension (file-name-nondirectory (buffer-file-name)))))) 它的工作原理是剥离其路径和扩展名的当前文件名,并将其用作java的参数,该文件位于文件所在的路径上。 这种方法的问题是如果当前文件是包的一部分那么 java的参数必须以包名和点为前缀,并且 必须从包含该包的目录运行java 。 因此,例如,如果文件是file.java且包名称是pkg, java pkg.file包含目录pkg(放置file.java的目录的父目录)的目录中将java调用为java pkg.file 。 如何修改函数以了解包并相应地构造java的参数? 我想有人可以通过在当前文件中搜索包声明来解决这个问题,例如 package pkg; 如果它找到一个,它使用该包名称来适当地调用java 。

Java中的Lisp表达式求值程序(仅使用一个堆栈)

我正在尝试使用Java实现一个简单的Lisp表达式求值程序。 实际上有关于这个主题的大量信息,但似乎它们都使用两个单独的堆栈来得出结果。 我想知道是否有可能只使用一个堆栈实现这样的程序,以及一些伪代码可能是什么样的。 谢谢。 有关我正在谈论的内容的更多信息 http://www.chegg.com/homework-help/questions-and-answers/outline-given-import-javautil-public-class-simplelispexpressionevaluator-current-input-lis-q2332957 http://stdioe.blogspot.ca/2012/01/lets-implement-simple-lisp-interpreter.html

项目特定的DSL是否是责任?

我从一个类似的问题中提出了这个问题,我在评论中提到了我收到的许多很棒的答案之一。 我最初询问AST宏,这主要引起了Lispers非常详细和深思熟虑的回应。 谢谢。 懒惰评估与宏 我在评论中提出的问题是项目特定的DSL是否真的是一个好主意。 当然,这是完全主观的 – 毕竟,当你用一种真正富有表现力的语言写作时,你在哪里画出富有表现力的API和实际的DSL? 例如,我认为大多数Rubyist称之为“DSL”的实际上只是精心设计的API而已。 请注意,我说项目特定的 API。 我认为很多人不会反对使用正则表达式或SQL这样做有意义。 但尽管如此,我认为我们都可以在API和DSL之间划清界限。 当然,它们都是真正的API,但无论如何。 在一个极端你有Lisp,似乎通过宏积极鼓励DSLs。 另一方面,你有像Java一样的DSL,这几乎是不可能的。 DSL的支持者认为它们可以提高灵活性,表现力并增加一致性(例如,使用与语言自身数字相同的运算符的自定义数字对象)。 批评者会说他们可以导致除了DSL编写者之外没有人知道的子语言,从根本上杀死了拥有不同编程语言的观点,并导致无人能理解的代码,因为与API 接口的方式不同。 我得说,我在很多方面同意双方的意见。 由于缺乏表现力,一些Java API只是简单的讨厌。 尽管如此,我通常可以在不阅读文档的情况下总结出正在发生的事情 – 这对于定制的DSL来说是丝毫不可能的。 也许DSL的支持者认为你应该总是阅读API文档。 我不同意,但我也离题了。 但是让我们来看看目前的一些大语言。 C#和Java,即。 他们都没有真正“做”DSL,但他们非常受欢迎。 这是因为他们不允许像DSL这样的东西,允许平庸的编码人员制作出仍然可以理解的代码吗? 事实上DSL是否允许平庸的编码器产生难以穿透的垃圾,这就是为什么Lisp没有尽可能多地使用它的原因,尽管DSL在右手中看起来像什么?

Common Lisp有类似java的Set Interface /实现类吗?

我需要这样的东西,一个元素集合,不包含任何元素的重复。 Common Lisp,特别是SBCL,有这样的东西吗?