问题标签 [lisp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
740 浏览

macros - Common Lisp 初学者:动态定义包的宏观问题

仍在努力了解有关宏的最佳实践。我正在尝试编写一个动态定义包的宏。

这仅适用于以下表达式:

但是因为这样的事情而惨遭失败:

或者

我了解大多数基本宏是如何工作的,但是如何实现这个让我无法理解。

0 投票
16 回答
19822 浏览

emacs - 除了 Emacs 之外,还有其他适合 Lisp 编程的编辑器吗?

我正在寻找替代方案,因为我发现 emacs 很难使用。我宁愿使用支持所有常用快捷键的编辑器,例如箭头键移动光标,CTRL+SHIFT+RightArrow 选择下一个单词等。

基本上,我不想为了使用 emacs 而重新学习所有熟悉的快捷方式。

谁能推荐一个合适的编辑器?

另一件事 - Notepad++ 支持 LISP 语法着色,但它没有像 emacs 那样的集成 LISP 控制台。是否可以并排打开一个 Notepad++ 窗口和一个命令行窗口,并在我想运行我的程序时使用命令行?

0 投票
6 回答
1158 浏览

database - Common Lisp 中的函数持久化

是否有任何 Common Lisp 的持久性解决方案,例如 Elephant,允许函数持久性?目前我的应用程序在数据库上存储一个标识符,然后在它所在的函数表中进行搜索,但是这种方法不允许存储动态创建的函数。

0 投票
3 回答
1589 浏览

programming-languages - 闭包的副作用,它们仍然纯粹是功能性的吗?

作为函数式编程的新手,我花了很多精力想“这是函数式的做事方式吗?” 显然,递归与迭代非常简单,很明显递归是做事的功能性方式。但以闭包为例。我已经了解了使用 Lisp 的闭包,并且我了解闭包是函数和环境的组合(听起来很像状态和行为)。例如:

这里我们有一个在 x 变量的环境中定义的函数 doubleX。我们可以将此函数传递给其他函数,然后调用它,它仍然能够引用 x 变量。该函数可以继续引用该变量,即使它是在定义该变量的环境之外调用的。我见过的很多关于闭包的例子都是这样的。其中 setf 用于更改词法变量的值。这让我很困惑,因为:

1.) 我认为 setf 是邪恶的。主要是因为它会引起副作用,而且显然它们也是邪恶的。

2.) 这真的是“功能性的”吗?似乎只是保持全局状态的一种方式,我认为函数式语言是无状态的。

也许我只是不明白闭包。有人可以帮我吗?

0 投票
3 回答
3137 浏览

lisp - 函数名称作为 Lisp 中的字符串?

我有一大堆全局变量,每个变量都有自己的设置函数。我的目标是通过这个列表,调用每个项目的设置函数,并生成匹配变量中加载的数据的一些统计信息。但是,我现在尝试的方法不起作用,我需要帮助才能让我的程序调用设置函数。

全局变量及其设置函数是区分大小写的,因为它来自 XML 并且是唯一性所必需的。

数据看起来像这样:

设置函数如下所示:

我尝试将它们连接在一起并将生成的字符串转换为函数,但这会干扰先前加载的设置函数的命名空间。这是我尝试实现的方法:

但是funcall在这个上使用是行不通的。如何从中获取可调用函数?

0 投票
5 回答
9086 浏览

c++ - 在 C/C++ 中实现解释器所需的参考资料

我发现自己加入了一个将解释器整合到现有应用程序中的项目。要解释的语言是 Lisp 的衍生语言,具有特定于应用程序的内置函数。单个“程序”将在应用程序中以批处理方式运行。

令我惊讶的是,这些年来我编写了几个编译器和几个数据语言翻译器/解析器,但我以前从未真正编写过解释器。原型很长,在 C++ 中实现为语法树遍历器。我可能会影响原型之外的架构,但不能影响实现语言(C++)。所以,约束:

  • 实现将在 C++ 中
  • 解析可能会使用 yacc/bison 语法处理(现在是)
  • 像 NekoVM 和 LLVM 这样的完整 VM/Interpreter 生态系统的建议对于这个项目可能并不实用。独立的更好,即使这听起来像 NIH。

我真正想要的是阅读有关实现解释器的基础知识的材料。我浏览了 SO 和另一个名为Lambda the Ultimate 的网站,尽管它们更倾向于编程语言理论。

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

  • Lisp in Small Pieces,克里斯蒂安·奎内克(Christian Queinnec)。推荐它的人说它“从琐碎的解释器转向更高级的技术,并完成了字节码和‘Scheme to C’编译器的呈现。”

  • 内科虚拟机。正如我上面提到的,我怀疑我们是否被允许合并一个完整的 VM 框架来支持这个项目。

  • 计算机程序的结构和解释。最初我建议这可能是矫枉过正,但经过一个健康的块,我同意@JBF。信息量大,思路开阔。

  • 保罗格雷厄姆在 Lisp上。我读过这篇文章,虽然它是对 Lisp 原则的信息性介绍,但不足以快速开始构建解释器。

  • 鹦鹉实施。这似乎是一个有趣的阅读。不确定它是否会为我提供基础知识。

  • 从零开始的计划。Peter Michaux 正在攻击 Scheme 的各种实现,从用 C 编写的快速而肮脏的 Scheme 解释器(在以后的项目中用作引导程序)到编译的 Scheme 代码。到目前为止非常有趣。

  • Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages ,在Books On Creating Interpreted Languages的评论线程中推荐。这本书包含两章专门介绍构建解释器的实践,所以我将它添加到我的阅读队列中。

  • New (and yet Old , ie 1979): Writing Interactive Compilers and Interpreters by PJ Brown。这本书早已绝版,但有趣的是提供了与基本解释器的实现相关的各种任务的大纲。我看到这个的评论褒贬不一,但因为它很便宜(我订购它时使用了大约 3.50 美元),我会试一试。

那么怎么样呢?有没有一本好书可以帮助新手并展示如何在 C/C++ 中为类似 Lisp 的语言构建解释器?你喜欢语法树遍历器还是字节码解释器?

回答@JBF:

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

  • 它不应该慢得可怕。当前的树行者似乎可以接受。

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

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

对于其他海报,我也会查看您的引文。谢谢大家!

0 投票
4 回答
2560 浏览

emacs - Lisp In A Box - 为什么要启动服务器?

我决定重新使用 LISP(自从我的 AI 课程以来就没有使用它)以更熟悉一般的函数式编程,所以我下载了 Lisp In A Box(我们实际上在之前的课程中使用过),它附带CLISP 和 Emacs。

当我运行它时,它说:

连接到 1617 端口。拿这个 REPL,兄弟,希望它对你有好处。

什么?所以我更仔细地查看了 Lisp In A Box 网页,发现了这个:

SLIME 是 Emacs 的集成开发环境,它通过网络套接字与 Common Lisp 实现接口。很多关于 SLIME 的信息都可以在 CLiki 的 SLIME 节点上找到。SLIME 手册以 PDF 格式在线提供。

我有点理解 SLIME 是什么(某种对 emacs 的扩展,对吗?)但是为什么文本编辑器会启动自己的服务器并连接到它呢?

0 投票
8 回答
4111 浏览

.net - 什么更适合 DSL:TCL 还是 Lisp?

什么更适合 DSL:TCL 还是 Lisp?你对 Java(C#)-TCL 绑定与 Lisp(Scheme) 有什么看法?什么 DSL 工具适用于 .Net 开发?(Microsoft DSL 工具除外)

0 投票
3 回答
794 浏览

emacs - 突出显示 Lisp 表单的 Emacs 模式

什么是突出显示 Lisp 表单的 Emacs 模式或包,它会改变背景的颜色,从而使您所在的表单具有一种颜色,外部形式具有另一种颜色,外部外部形式具有另一种等等?

0 投票
4 回答
5359 浏览

lisp - 在 Scheme 中将字符串转换为代码

如何将字符串转换为PLT Scheme中的相应代码(不包含该string->input-port方法)?例如,我想转换这个字符串:

进入这个列表:

是否可以在不打开文件的情况下执行此操作?