问题标签 [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 投票
1 回答
2849 浏览

xml - 与 JSON 和 XML 相比,为什么不使用 s 表达式?

为什么 Lisp 普及的 s 表达式不被视为相对于 JSON 和 XML 的选项?他们是否有一些缺陷使 Lisp s 表达式无法流行?

0 投票
2 回答
106 浏览

emacs - 从当前点获取最外层列表

从 Emacs 缓冲区内的当前位置点,如何获取包含该点的最外层列表/s 表达式?
下面举几个例子来说明我想要实现的目标:

示例 1:

输出 1:

示例 2:

输出 2:

示例 3:

输出 3:

Emacs 是否提供了任何“现成”功能来完成上述行为?
如果没有,您能指导我采用更简单的方法来完成它吗?

更新#1

正如建议的那样,我尝试了以下方法:

但是,在按下 CTRL+PI 后,无论该点在哪里,都没有输出。
我究竟做错了什么 ?

0 投票
1 回答
105 浏览

list - (未绑定变量)在 S-Expressions 列表上使用函数(mit-scheme)

我试图在 S 表达式列表上使用一个函数,但它只是给了我一个错误"Unbound variable butter"

0 投票
4 回答
2414 浏览

list - 从 tcl 中的文件解析键控列表?

我有一个文件,其中包含以下格式的记录:

并非所有记录都具有相同的关键字,但它们都是嵌套的键控列表,我需要将它们解析为 .csv 文件以便于查看。但是,当我读入文件时,它以单个字符串而不是键控列表的形式出现。在空格或换行符上拆分无济于事,因为它们也位于键控列表内。我试图在 }\n 和 {T 之间插入一个管道 (|) 并在管道上拆分,但我仍然得到了字符串。

我希望有人能指出正确的方向来解析这些 s-expression 文件。

提前致谢!

Ĵ

0 投票
2 回答
1283 浏览

compiler-construction - OCaml 中的 S 表达式树到抽象语法树

我正在 OCaml 中实现一种符号语言,并且一直在努力将我的 s 表达式树转换为抽象语法树。

s-表达式树是

抽象语法树是

该函数ast_of_sexpr需要符合类型签名

val ast_of_sexpr : Sexpr.expr -> expr.

这是我的挑战;我想不出一种符合类型签名的方法来递归到 s 表达式树(即嵌套列表)并将 s 表达式树节点转换为抽象语法树节点。

在理想情况下,我可以评估列表头部并在一个表达式中递归尾部。我尝试使用排序来模拟这种理想状态。但这当然会忽略左侧的值,并且只会在打印已解析的标记流时输出最后一个值。

任何人都可以建议一种评估列表头的方法,而不忽略 value,并更深入地递归到 s 表达式树中吗?我什至愿意阅读更好的解决方案来在两棵树之间进行翻译。

0 投票
1 回答
160 浏览

ocaml - s-表达式中是否禁止尾随空格?

当我尝试sexplib时,它告诉我

Sexp.of_string " a";;是正确的。

Sexp.of_string "a ";;是错的。


sexp中是否禁止尾随空格?

为什么?

0 投票
1 回答
909 浏览

parsing - 一种优雅的方式来解析性

sexp是这样的:type sexp = Atom of string | List of sexp list,例如,"((a b) ((c d) e) f)"

我写了一个解析器来解析一个 sexp 字符串的类型:

但我认为它太冗长和丑陋。

有人可以用一种优雅的方式帮助我编写这样的解析器吗?

实际上,我在编写解析器代码时总是遇到问题,我只能写这么丑的一个。

这种解析有什么技巧吗?如何有效地处理暗示递归解析的符号,例如(, ?)

0 投票
1 回答
166 浏览

haskell - 使用 Haskell 的数学表达式的邻域

我正在尝试用 Haskell 实现一种算法来操作数学表达式。我有这个数据类型:

这对我的问题来说已经足够了。

给定一组表达式转换,例如:

(加 ab) => (加 b)

(加 (加 ab) c) => (加 a (加 bc))

和一个表达式,例如:x = (Add (Add xy) (Add zt)),我想找到x附近的所有表达式。假设 x 的邻域定义为: y in Neighborhood(x) 如果 y 可以在单个变换内从 x 到达。

我是 Haskell 的新手。我什至不确定 Haskell 是否适合这项工作。

最终目标是获得一个函数:等效 x,它返回一组与 x 等效的所有表达式。换句话说,在 x 的邻域的闭包中的所有表达式的集合(给定一组变换)。

现在,我有以下内容:

但它可能比需要的慢(nub 是 O(n^2))并且缺少一些术语。

例如,如果你有 f = (x+y)+z,那么,你将不会得到 (x+z)+y,还有一些其他的。

0 投票
1 回答
169 浏览

haskell - 如何优化传递闭包?

我有以下代码,我想对其进行优化。我对 nub 特别不满意:

为了充分理解这一点,我提供了我所有的代码,这些代码并不长:

我还有一个附带问题,关于使用 f::Exp->Exp 的函数 deep 和 sf。最后,f 应该是 f::[Exp]->[Exp]。现在, f 只执行一种转换。最后,我希望它执行多种转换,例如:a+b->b+a、(a+b)+c->a+(b+c) 等。

0 投票
2 回答
360 浏览

syntax - Little Schemer “S 表达式”谓词

小计划者问道。但如何测试?


从语法上讲,我知道如何测试其他语句,例如

不完全确定如何测试这个......

因为它刚刚返回......

但无论如何,知道如何测试 S 表达式让我很困惑

所以,像往常一样,任何照明都非常感谢