问题标签 [s-expression]

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 投票
3 回答
948 浏览

functional-programming - 列表作为通用数据类型表示的缺点是什么?

Lisp 程序员倾向于使用列表来表示所有其他数据类型。

但是,我听说列表不是数据类型的良好通用表示。

与使用记录相比,以这种方式使用列表的缺点是什么?

0 投票
4 回答
2794 浏览

c++ - 在 OOP 中解析 S 表达式的正确方法

我正在寻找一种实现 S 表达式阅读器的方法(稍后将与 Scheme 解释器和编译器一起使用),但我一直在问自己(如果有的话)我应该如何(如果有的话)为它编写一个 AST。

我一直在阅读 SICP,这在 Scheme 中非常简单,但我希望以 OO 方式在 C++ 中实现解释器和编译器。

请记住,我这样做只是为了学习目的,所以我并不是在寻找最简单或最快的方法,而是寻找正确且可重用的方法。

我在一些 Scheme 实现中看到人们解析 s 表达式并轻松输出 cons 单元格,如下所示:

每种 Scheme 都有一个 Sexpr 子类Atom,或者类似的东西。

我不确定,但这对我来说似乎是一种黑客行为......这项工作不应该由口译员而不是读者来完成吗?

我想知道的是,这是否被认为是阅读 S 表达式的最佳(或正确)方式,或者这更像是解释器而不是解析器的工作?解析器是否应该拥有自己的 AST 而不是依赖于 cons 单元?

0 投票
2 回答
451 浏览

xml - 在 LISP 中使用任意分隔符解析 S 表达式

(我对 Lisp 很陌生,不知道如何做到这一点,但足够熟悉,知道必须有一个简单的方法。)

我最近读到的一篇文章引起了我的兴趣,该文章提倡将日志文件存储为 Lisp 样式的 S 表达式,以便将日志文件轻松转换为 DSL。这让我想到了其他 DSL 的类似语法,但我遇到了障碍。

解析分隔符是括号的 s 表达式很容易

可以从文件/流中读取并进行简单评估。

如果 XML 真的只是一个 S 表达式,难道不应该有一种简单的方法来转换像

进入

我可以用字符串操作技术来伪造这种行为(哎呀,一个正则表达式可以解决这个问题,真的)。但这似乎是对 Lisp 的亵渎——这些只是 S 表达式!这同样适用于基于 Lisp 的 lex/yacc 版本——我可以看到需要更复杂的语法,但实际上,这只是以一种不太有效的方式伪装的 Lisp 语法。

理论上,这应该超越 XML,扩展到任何与 Lisp 语法同态的上下文无关语法。(我知道 Lisp 并没有完全由像 S 表达式这样简单的上下文无关文法定义,但显然后者是前者的严格子集,所以我的陈述仍然有效)。

所以,简而言之:有没有一种简单的方法来定义与 S 表达式同态的上下文无关语法的语法(例如 XML)并在 Lisp(或基于 Lisp 的 DSL)中解析该语法?

0 投票
1 回答
242 浏览

lisp - 什么是语法表达式?

我在“Lisp 之国”一书中读到,作者提到syntax expression。这是否意味着能够将语法表达为一种数据形式?这和S-expression(符号表达式)一样吗?

0 投票
2 回答
459 浏览

emacs - 在 S-Expression(词法范围)内搜索和替换变量名?

使用启用 Paredit 的 emacs。如何搜索 LISP (Clojure) S 表达式并重命名变量?我想在当前的 S 表达式中而不是在全局范围内这样做。

0 投票
3 回答
559 浏览

c++ - 使用 boost::proto 构建 s 表达式

我正在尝试使用boost::proto以下终端构建 s-expression 对象:

并像这样使用它:

但是,这对我来说并不编译;

我做错了什么?任何建议如何使用 s 表达式获得类似或等效的东西boost::proto

0 投票
5 回答
17121 浏览

list - Lisp:列表与 S 表达式

我是 Lisp 的新手。我遇到了 2 个术语“列表”和“S 表达式”。我只是无法区分它们。它们只是 Lisp 中的同义词吗?

0 投票
2 回答
1083 浏览

emacs - Emacs中sexp和list的区别?

在 Emacs 中,有一些命令可以在括号(或任何括号)中分隔的表达式之间移动光标,即 forward-sexp、backward-sexp、forward-list 和 backward-list。在 Lisp 和任何其他代码中,它们的行为相似,所以我认为 *-sexp 和 *-list 之间没有区别,除了最后一个在注释或引号中不起作用。

sexp 和 list 命令之间的功能区别是什么,我应该什么时候使用?

以防万一,我了解 up-list 和 down-list 命令,它们与主题无关。

0 投票
1 回答
327 浏览

ruby - ruby_parser、AST 在 1.8.7 之前的版本和 ruby​​ 中的 S-expression 的用法?

最近我正在将在 ruby​​ 1.8.7 中使用 ParseTree 的 ror 项目转换为 ruby​​ 1.9.3

发现 ParseTree 不能与 1.9.3 一起使用,在一堆 googlers 中搜索它,仍然坚持一些代码迁移

找到了各种替代方案,如 ruby​​_parser、sourcify、parse_tree_reloaded 等...

所有这些都有其局限性,例如 sourcify 无法进行动态分析解析,即。eval 的用法。

通过所有这些,我想知道 Ruby 社区中 AST/Parsing/SExp 的最佳用法,如果我不选择 AST 路径,ruby 1.9.3 中的替代方案是什么?

一些用例指针将不胜感激。

谢谢。

0 投票
3 回答
3013 浏览

common-lisp - Common lisp:有没有一种不那么痛苦的输入数学表达式的方法?

我喜欢普通的 lisp,但有时输入简单的数学表达式真的很痛苦,比如

(当然我可以转换这个,但它有点慢,我先写(+()()),然后在每个括号中我放(*()())......)

我想知道这里是否有人知道输入此内容的更好方法。我在考虑写一个数学宏,在哪里

扩展到

但是对于名称很长的变量,解析是一个问题。

有人有更好的建议吗?