标签: lisp

Homoiconicity,它是如何工作的?

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

lisp clojure

38
推荐指数
4
解决办法
4406
查看次数

函数式编程语言是否适合图形编程?

对此非常好奇,从我自己的经验来看,所有的图形编程似乎都与C或C++有关.像Direct10X一样.函数式编程语言是否提供某种图形库来开发视频游戏?

lisp functional-programming clojure

38
推荐指数
3
解决办法
1万
查看次数

Lisp代码格式

其中一个花时间评论关于Clojure/LISP语法的另一个问题的人指出我没有用标准的LISP方式编写我的示例代码.所以他很友好地重写了代码片段,这是一个很大的帮助.但它在我的脑海里提出了另一个问题.为什么这样:

(if (= a something)
  (if (= b otherthing)
    (foo)))
Run Code Online (Sandbox Code Playgroud)

这是标准的LISP格式,可以使用这种形式:

(if (= a something)
  (if (= b otherthing)
    (foo)
  )
)
Run Code Online (Sandbox Code Playgroud)

这是因为我的C++开发背景,我会天真地格式化这段代码的方式.我想知道后一种格式化是否有任何好处,或者它只是一种根深蒂固的标准(如QWERTY键盘).我不是要争论 - 我很难理解为什么第一种形式会更好.第二种形式帮助我更容易地看到代码结构.

lisp code-formatting clojure

37
推荐指数
2
解决办法
4683
查看次数

为什么代码为数据?

什么是代码作为数据?我听说它比"code-as-ascii-characters"要好,但为什么呢?我个人认为代码作为数据的哲学实际上有点令人困惑.

我已经涉足了Scheme,但我从来没有真正得到整个代码作为数据的东西,并想知道它究竟是什么意思?

lisp scheme coding-style common-lisp data-structures

37
推荐指数
6
解决办法
8371
查看次数

在Emacs中,这个错误意味着什么?"警告:运行时需要cl包"

我是字节编译模块.它给了我这个警告:

 Warning: cl package required at runtime
Run Code Online (Sandbox Code Playgroud)

为什么这是一个警告?我很清楚我正在使用这个cl包.事实上(require 'cl),模块中有一个声明.

使用这些cl东西有什么问题吗?

如果是,是否有已发布的变通方法列表?我使用的主要内容是mapcandelete-duplicates.

lisp emacs common-lisp

37
推荐指数
3
解决办法
8666
查看次数

Common Lisp是否有任何高级,易于安装的GUI库?

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

lisp user-interface common-lisp

36
推荐指数
3
解决办法
6051
查看次数

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

我发现自己依附于一个项目,将一个解释器整合到一个现有的应用程序中.要解释的语言是Lisp的衍生物,具有特定于应用程序的内置.各个"程序"将在应用程序中以批处理方式运行.

我很惊讶多年来我编写了几个编译器和几个数据语言翻译器/解析器,但我以前从未真正编写过翻译器.原型很远,用C++实现为语法树walker.我可能会影响原型之外的架构,但不能影响实现语言(C++).所以,约束:

  • 实现将在C++中
  • 解析可能会用yacc/bison语法处理(现在是)
  • 像NekoVM和LLVM这样的完整虚拟机/解释器生态系统的建议可能对这个项目不实用.自包含更好,即使这听起来像NIH.

我真正想要的是阅读有关实施口译员基础知识的材料.我做了一些浏览SO,另一个名为Lambda the Ultimate的网站,虽然他们更倾向于编程语言理论.

到目前为止我收集的一些花絮:

  • Lisp in Small Pieces,作者:Christian Queinnec.推荐它的人说它"从简单的解释器到更高级的技术并完成呈现字节码和'Scheme to C'编译器."

  • NekoVM.正如我上面提到的,我怀疑我们是否可以合并整个VM框架来支持这个项目.

  • 计算机程序的结构与解释.最初我建议这可能是矫枉过正,但是通过一个健康的块,我同意@JBF.信息量大,思维扩张.

  • 关于保罗格雷厄姆的Lisp.我已经读过这篇文章,虽然它是对Lisp原理的一个信息性介绍,但还不足以快速开始构建一个解释器.

  • 鹦鹉实施.这看起来很有趣.不确定它会为我提供基本面.

  • 来自Scratch的计划.Peter Michaux正在攻击Scheme的各种实现,从用C编写的快速脏方案解释器(用作后续项目中的引导程序)到编译的Scheme代码.到目前为止非常有趣.

  • 语言实现模式:创建自己的特定域的和通用编程语言,在关于创建解释语言的书籍的注释主题中推荐.这本书包含两章专门介绍构建解释器的实践,所以我将它添加到我的阅读队列中.

  • New(and old,即1979):由PJ Brown 编写交互式编译器和解释器.这已经绝版了,但是提供与基本解释器的实现相关的各种任务的概述很有趣.我已经看到这个混合评论,但因为它便宜(我订购时使用的价格约为3.50美元)我会给它一个旋转.

那怎么样?是否有一本很好的书,用手拿新手,并展示了如何在C/C++中为类似Lisp的语言构建一个解释器?您是否喜欢语法树步行器或字节码解释器?

回答@JBF:

  • 当前的原型是一个解释器,当我们接受任意代码文件的路径并在我们的应用程序环境中执行它时,它对我有意义.内置函数用于影响我们的内存数据表示.

  • 它不应该是非常缓慢.目前的树木行走者似乎可以接受.

  • 该语言基于 Lisp,但不是Lisp,因此不需要符合标准.

  • 如上所述,我们不太可能允许添加完整的外部VM /解释器项目来解决此问题.

对于其他海报,我也会检查你的引文.谢谢,全部!

c++ lisp interpreter

36
推荐指数
3
解决办法
8224
查看次数

让vs def in clojure

我想Scanner在clojure程序中创建一个Java 类的本地实例.为什么这不起作用:

; gives me:  count not supported on this type: Symbol 
(let s (new Scanner "a b c"))
Run Code Online (Sandbox Code Playgroud)

但它会让我创建一个像这样的全局实例:

(def s (new Scanner "a b c"))
Run Code Online (Sandbox Code Playgroud)

我的印象是唯一的区别是范围,但显然不是.let和之间有什么区别def

lisp function clojure let

36
推荐指数
5
解决办法
9463
查看次数

在什么意义上,像Elixir和Julia homoiconic这样的语言?

Lisp中的同质性很容易看出:

(+ 1 2)

既是函数调用+1,2作为参数,以及作为含有一个列表+,12.它同时是代码和数据.

但是,像朱莉娅这样的语言:

1 + 2

我知道我们可以Expr在Julia中将其解析为:

:(1 + 2)

然后我们可以获得AST并操纵它:

julia> Meta.show_sexpr(:(1+2)) (:call, :+, 1, 2)

因此,我们可以在Julia(和Elixir)中操纵程序的AST.但它们是否与Lisp一样具有同音性 - 任何代码片段实际上只是语言本身的数据结构吗?

我不知道1 + 2Julia中的代码是如何立即像(+ 1 2)Lisp中的数据一样只是一个列表.它仍然是杀人的吗?

lisp homoiconicity julia

36
推荐指数
1
解决办法
4434
查看次数

为什么习惯上在基于Lisp的语言中将许多右括号放在一行上?

通常代码如下所示:

(one-thing
    (another-thing arg1 (f arg5 r))
    (another-thing arg1 (f arg5 r)))
Run Code Online (Sandbox Code Playgroud)

为什么不喜欢这个?:

(one-thing
    (another-thing arg1 (f arg5 r))
    (another-thing arg1 (f arg5 r))
)
Run Code Online (Sandbox Code Playgroud)

它允许更容易地添加和删除"另一个东西"行(不删除和重新添加尾部右括号).你也可以对那个单独的右括号(例如";循环结束")发表一些评论.

当我使用第二种风格的代码与使用第一种风格的现有代码混合时有多糟糕?

lisp coding-style clojure parentheses

35
推荐指数
3
解决办法
3727
查看次数