问题标签 [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.
xml - 与 JSON 和 XML 相比,为什么不使用 s 表达式?
为什么 Lisp 普及的 s 表达式不被视为相对于 JSON 和 XML 的选项?他们是否有一些缺陷使 Lisp s 表达式无法流行?
emacs - 从当前点获取最外层列表
从 Emacs 缓冲区内的当前位置点,如何获取包含该点的最外层列表/s 表达式?
下面举几个例子来说明我想要实现的目标:
示例 1:
输出 1:
示例 2:
输出 2:
示例 3:
输出 3:
Emacs 是否提供了任何“现成”功能来完成上述行为?
如果没有,您能指导我采用更简单的方法来完成它吗?
更新#1
正如建议的那样,我尝试了以下方法:
但是,在按下 CTRL+PI 后,无论该点在哪里,都没有输出。
我究竟做错了什么 ?
list - (未绑定变量)在 S-Expressions 列表上使用函数(mit-scheme)
我试图在 S 表达式列表上使用一个函数,但它只是给了我一个错误"Unbound variable butter"
。
list - 从 tcl 中的文件解析键控列表?
我有一个文件,其中包含以下格式的记录:
并非所有记录都具有相同的关键字,但它们都是嵌套的键控列表,我需要将它们解析为 .csv 文件以便于查看。但是,当我读入文件时,它以单个字符串而不是键控列表的形式出现。在空格或换行符上拆分无济于事,因为它们也位于键控列表内。我试图在 }\n 和 {T 之间插入一个管道 (|) 并在管道上拆分,但我仍然得到了字符串。
我希望有人能指出正确的方向来解析这些 s-expression 文件。
提前致谢!
Ĵ
compiler-construction - OCaml 中的 S 表达式树到抽象语法树
我正在 OCaml 中实现一种符号语言,并且一直在努力将我的 s 表达式树转换为抽象语法树。
s-表达式树是
抽象语法树是
该函数ast_of_sexpr
需要符合类型签名
val ast_of_sexpr : Sexpr.expr -> expr
.
这是我的挑战;我想不出一种符合类型签名的方法来递归到 s 表达式树(即嵌套列表)并将 s 表达式树节点转换为抽象语法树节点。
在理想情况下,我可以评估列表头部并在一个表达式中递归尾部。我尝试使用排序来模拟这种理想状态。但这当然会忽略左侧的值,并且只会在打印已解析的标记流时输出最后一个值。
任何人都可以建议一种评估列表头的方法,而不忽略 value,并更深入地递归到 s 表达式树中吗?我什至愿意阅读更好的解决方案来在两棵树之间进行翻译。
ocaml - s-表达式中是否禁止尾随空格?
当我尝试sexplib时,它告诉我
Sexp.of_string " a";;
是正确的。
Sexp.of_string "a ";;
是错的。
sexp中是否禁止尾随空格?
为什么?
parsing - 一种优雅的方式来解析性
sexp是这样的:type sexp = Atom of string | List of sexp list
,例如,"((a b) ((c d) e) f)"
。
我写了一个解析器来解析一个 sexp 字符串的类型:
但我认为它太冗长和丑陋。
有人可以用一种优雅的方式帮助我编写这样的解析器吗?
实际上,我在编写解析器代码时总是遇到问题,我只能写这么丑的一个。
这种解析有什么技巧吗?如何有效地处理暗示递归解析的符号,例如(
, ?)
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,还有一些其他的。
haskell - 如何优化传递闭包?
我有以下代码,我想对其进行优化。我对 nub 特别不满意:
为了充分理解这一点,我提供了我所有的代码,这些代码并不长:
我还有一个附带问题,关于使用 f::Exp->Exp 的函数 deep 和 sf。最后,f 应该是 f::[Exp]->[Exp]。现在, f 只执行一种转换。最后,我希望它执行多种转换,例如:a+b->b+a、(a+b)+c->a+(b+c) 等。
syntax - Little Schemer “S 表达式”谓词
小计划者问道。但如何测试?
从语法上讲,我知道如何测试其他语句,例如
和
不完全确定如何测试这个......
因为它刚刚返回......
但无论如何,知道如何测试 S 表达式让我很困惑
所以,像往常一样,任何照明都非常感谢