问题标签 [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 回答
587 浏览

ocaml - sexplib 如何与 Map 这样的函子类型一起使用?

Sexplib 的语法扩展使得在 OCaml 中任意用户定义的数据结构的序列化和反序列化变得容易。通常通过with sexp在类型定义的末尾添加注释来完成:

这似乎没有直接推广到基于函子的类型,也不清楚 Sexplib 标准类型转换器如何捕获甚至标准函子。

到目前为止,我已经通过int Map.Make(String).t在序列化之前将特定的 Map 类型实例(例如 )扁平化为列表来解决这个问题,反之亦然,但 Sexplib/Jane Street Core 的雄心勃勃的作者肯定没有完全忽视这一点。我还注意到版本的电池将自定义 sexp 序列化混合到它们的主要模块(如 [Bat]Map)中,但这已经被删除了一段时间。

Sexplib 序列化通常如何使用 Maps 或其他复杂函子类型?

0 投票
3 回答
336 浏览

nested - 是否有任何 lisp 有一个 s 表达式作为它们的头部,例如 ((f 2) 3 4)?如果不是,为什么?

是否有任何 lisp 支持嵌套的 s 表达式?例如

大概评估为(f 2)要应用于的函数/宏3 4

是否有可能有一个 lisp 支持这样的事情?或者是否有技术限制禁止/使其不切实际?

0 投票
5 回答
1112 浏览

c - Lisp s 表达式的平面求值

我试图弄清楚如何实现 Lisp 评估 non-recursive。我的基于 C 的评估器是Minimal Lisp文件 l1.c。然而,那里的几个函数再次递归到 eval:eval、apply、evargs、evlist 以及 Lisp Ops defineFunc、whileFunc、setqFunc、ifFunc...

我试图找出一个的评价。我可以想出一些可能的方法:

  1. 转换为字节码并在 VM 中执行
  2. 实现一个扁平的 Forth 求值器并在 Forth 中实现 Lisp 求值,这就是lf.f所做的。
  3. 另一种可能性可能是将 l1.c 中的所有递归函数加入一个大的 switch 循环中。局部变量将连接到基于堆的结构中,对递归子函数的调用将由基于堆的返回堆栈实现。

我的问题是:是否存在以不同方式进行平面评估的算法/论文/实现。我正在寻找一种不转换为字节码但类似于使用下推堆栈的无递归“深度优先遍历”的实现。我想对原始的 s 表达式进行操作。

答:在 c 中实现评估器时,您需要在一个平面循环中实现整个事物,手动实现返回堆栈和堆栈帧,使用 goto 和 switch() 对控制流进行建模。这是一个例子:flat

0 投票
1 回答
2420 浏览

list - Lisp S 表达式和列表长度/大小

我正在尝试使用 Common Lisp 函数编写一个函数,该函数将计算一个 s 表达式中有多少个 s 表达式。例如:

嵌套表达式是可能的,所以:

我写了一个函数来查找长度,如果没有嵌套表达式,它就可以工作。这是:

现在我修改了它以尝试支持以下嵌套表达式:

这适用于没有嵌套的表达式,但总是比嵌套表达式的答案小 1。这是因为以上面的示例为例((if x then (x = y)(z = w))),这将if首先查看并满足第三个条件,将 cdr(表达式的其余部分作为列表)返回到length. 在达到 (x=y) 之前也是如此,此时+1返回 a。这意味着该表达式(if x then .... )尚未计算在内。

我可以通过哪些方式来解释它?添加+2将过度计算未嵌套的表达式。

我需要它在一个函数中工作,因为嵌套可以在任何地方发生,所以:

0 投票
1 回答
640 浏览

emacs - 实时可视化 s 表达式

我想写这样的 Lisp/Scheme/Clojure 代码

让它看起来有点像这样

我想在我操纵我的表情时实时看到树的变化。随着树木变大,布局将变得重要。

有没有任何工具可以做到这一点?我怀疑 Emacs 世界中可能存在某些东西。

0 投票
1 回答
181 浏览

ocaml - OCaml sexplib,如何定义自定义 to_sexplib 函数?

我正在使用with sexp语法自动生成 s-exp 函数。

问题是我用 sexplib 打印的数据结构有一些递归指针,打印最终会导致堆栈溢出。

所以我需要重写一个 to_sexp 函数并让它返回"(SomeRecursiveData)",我该怎么做?

注意:我的数据定义格式为:

0 投票
2 回答
1624 浏览

c# - 是否有用于匹配(句法解析)树中的模式的 C# 实用程序?

我正在从事一个自然语言处理 (NLP) 项目,在该项目中,我使用句法解析器从给定的句子中创建句法解析树。

示例输入:我遇到了 Joe 和 Jill,然后我们去购物
示例输出: [TOP [S [S [NP [PRP I]] [VP [VBD ran] [PP [IN into] [NP [NNP Joe] [CC和] [NNP Jill]]]]] [CC and] [S [ADVP [RB then]] [NP [PRP we]] [VP [VBD going] [NP [NN shopping]]]]]] 在此处输入图像描述

我正在寻找一个 C# 实用程序,它可以让我执行复杂的查询,例如:

  • 获取与“乔”相关的第一个 VBD
  • 获取最接近“购物”的 NP

这是一个执行此操作的Java 实用程序,我正在寻找 C# 等价物。
任何帮助将非常感激。

0 投票
2 回答
3144 浏览

c# - S-表达式解析

我今天早些时候遇到了这个问题:

示例输入:我遇到了 Joe 和 Jill,然后我们去购物
示例输出: [TOP [S [S [NP [PRP I]] [VP [VBD ran] [PP [IN into] [NP [NNP Joe] [CC和] [NNP Jill]]]]] [CC and] [S [ADVP [RB then]] [NP [PRP we]] [VP [VBD going] [NP [NN shopping]]]]]]

在此处输入图像描述

我正要建议简单地将预期输出(因为它看起来像一个 s 表达式)解析为一个对象(在我们的例子中是一个树),然后使用简单的 LINQ 方法来处理它。然而,令我惊讶的是,我找不到 C# s-expression 解析器。

我唯一能想到的是使用 Clojure 来解析它,因为它编译为 clr,但我不确定它是否是一个好的解决方案。

顺便说一句,我不介意输出 type 的答案dynamic。我在这里找到的唯一答案是反序列化为特定模式。

总结一下我的问题: 我需要在 C# 中反序列化 s 表达式(序列化对于这个问题的未来读者来说会很好)

0 投票
1 回答
2831 浏览

java - Java LISP 实现几乎可以工作

当我运行它时,仅测试 3、4、5、7、8、9、10 工作正常,基于:http: //joeganley.com/code/jslisp.html

这些结果仅在我删除测试 6 时出现,因为它给出了异常并停止执行。知道我哪里出错了吗?

如果 6 未注释掉,则会出错:

0 投票
2 回答
364 浏览

matrix - smalltalk中的惰性列表s表达式矩阵

所以我在 smalltalk 中创建了一个名为 LazyMatrix 的类。该类只有 1 个实例变量,不能是除 Object 之外的任何子类。LazyMatrix 的实例变量称为block,必须是back。我像这样初始化 LazyMatrix:

将有一种设置值的方法

此方法将通过将新块设置为 [#(ij value).[nil]] 来重新定义块。每个后续调用都会将一个 3 的数组添加到块中,因此它的扩展类似于 [#(ij value).[#(ij value).[nil]]],很像 s 表达式或“惰性列表”。

所以我需要访问这个块的头部(即 [#(ij value) )以及这个块的尾部(即 [#(ij value).[nil]] )。我如何在 smalltalk 中做到这一点?我知道在块上调用 value 将返回尾部......现在我需要返回头部。