Tag: lisp

在clojure中让vs

我想在clojure程序中创build一个Java Scanner类的本地实例。 为什么这不起作用: ;gives me: count not supported on this type: Symbol (let s (new Scanner "abc")) 但它会让我创build一个像这样的全局实例: (def s (new Scanner "abc")) 我的印象是,唯一的区别是范围,但显然不是。 let和def有什么区别?

在C / C ++中实现解释器所需的参考文献

我发现自己附属于一个项目,将口译员融入到现有的应用程序中。 要解释的语言是Lisp的一个衍生物,具有特定于应用程序的内置函数。 个别“程序”将在应用程序中以批处理方式运行。 我感到惊讶的是,多年来我写了几个编译器和几个数据语言翻译器/parsing器,但是我从来没有真正写过翻译器。 原型在C ++中被实现为一个语法树walker。 我可能会影响架构超出原型,但不是实现语言(C ++)。 所以,约束: 实现将在C ++中进行 parsing可能会用yacc / bison语法来处理(现在是这样) 完整的虚拟机/解释器生态系统,如NekoVM和LLVM的build议可能不适合这个项目。 自给自足是更好的,即使这听起来像NIH。 我真正想要的是阅读实施口译员基本原理的材料。 我做了一些浏览SO,另一个网站叫做Lambda Ultimate ,虽然他们更倾向于编程语言理论。 到目前为止,我收集的一些花絮: Lisp in Small Pieces ,作者:Christian Queinnec。 推荐它的人说:“从简单的解释器到更高级的技术,完成字节码和'Scheme to C'编译器。 NekoVM 。 正如我上面提到的,我怀疑我们会被允许整合一个VM框架来支持这个项目。 计算机程序的结构和解释 。 本来我build议这可能是矫枉过正,但通过一个健康的块,我同意@JBF。 非常丰富的信息,并扩大思维。 关于Lisp by Paul Graham。 我已经阅读了这篇文章,虽然这是对Lisp原理的丰富介绍,但还不足以启动构build一个解释器。 鹦鹉执行 。 这似乎是一个有趣的阅读。 不知道它会为我提供基础。 计划从零开始 。 Peter Michaux正在攻击Scheme的各种实现,从用C语言编写的快速简洁的Scheme解释器(用作后面项目中的引导程序)到已编译的Scheme代码。 到目前为止非常有趣。 语言实现模式:创build您自己的特定领域和一般编程语言 , 在创build解释语言书籍的评论主题中推荐。 这本书包含了两个章节,专门介绍build立口译员的做法,所以我将其添加到我的阅读队列中。 […]

将Common Lisp代码移植到Clojure

将Common Lisp应用程序移植到Clojure有多实用? 更具体地说,Common Lisp中存在的Clojure中不存在的特性,必须重写?

Common Lisp中的dynamic和词汇variables

我正在阅读Peter Seibel的“Practical Common Lisp”一书。 在第6章“variables”部分“词汇variables和闭包”和“dynamic,又名特殊variables”中。 http://www.gigamonkeys.com/book/variables.html 我的问题是,这两个部分的例子显示了如何(让…)可以影响全局variables,并没有真正说明dynamic和词法变化之间的差异。 我明白闭包是如何工作的,但在这个例子中,我并没有真正了解这个特别的东西: (defvar *x* 10) (defun foo () (format t "Before assignment~18tX: ~d~%" *x*) (setf *x* (+ 1 *x*)) (format t "After assignment~18tX: ~d~%" *x*)) (defun bar () (foo) (let ((*x* 20)) (foo)) (foo)) CL-USER> (foo) Before assignment X: 10 After assignment X: 11 NIL CL-USER> (bar) Before assignment […]

一个语言可以有没有括号的Lisp强大的macros?

一个语言可以有没有括号的Lisp强大的macros?

如何访问Emacs Lisp中当前区域的内容?

我想在函数内以string的forms访问当前区域的内容。 例如: (concat "stringa" (get-region-as-string) "stringb") 谢谢 埃德

函数式编程:什么是“不正确的列表”?

有人可以解释一下“不正确的清单”是什么吗? 注意 :谢谢大家! 所有你们摇滚!

同伦,它是如何工作的?

有人可以build议解释同伦性概念的文章,特别是使用Clojure。 为什么Clojure是同相的,但在Java等其他语言中很难做到这一点?

Lisp代码格式

其中一位花时间评论我关于Clojure / LISP语法的其他问题的人指出,我没有用标准的LISP方式编写示例代码。 所以他很友善地重写代码片段,这是一个很大的帮助。 但是在我的脑海里又提出了另一个问题。 为什么会这样: (if (= a something) (if (= b otherthing) (foo))) 这是标准的LISP格式可以select这种forms: (if (= a something) (if (= b otherthing) (foo) ) ) 这是我的天真格式化代码的方式,因为我的C ++开发背景。 我想知道是否有利于后者的格式,或者它只是一个根深蒂固的标准(如QWERTY键盘)。 我不想争论 – 我很难理解为什么第一种forms更可取。 第二种forms帮助我更容易地看到代码结构。

Common Lisp有没有高级的,易于安装的GUI库?

是否有任何良好的跨平台(至lessSBCL和CLISP)易于安装GUI库?