问题标签 [sml]

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 回答
409 浏览

functional-programming - 实数模式匹配(标准 ML)

这样做:

导致错误,但如果我更改 0.0,错误就会消失。但是,我需要匹配 0.0,我想知道是否以及如何实现。

0 投票
1 回答
491 浏览

java - 给定另一个 AST 树,在 Java 中创建一个 AST 树

目前,我正在用 Java 表示我拥有的 AST 树,它是用 SML 编写的,所以我可以随时用 Java 遍历它。

我想知道我是否应该在 Java 中创建一个包含我想要表示的数据的 Node 类,以及一个表示该特定节点的子节点的数组列表(List)?然后,我可以拥有一个只有根节点的 ASTTree 类。

我不知道我是否需要考虑更多花哨的东西。

任何问题/意见将不胜感激!

-保罗

0 投票
3 回答
4371 浏览

compiler-construction - 用于 Linux 的快速标准 ML 编译器或字节码解释器,带有 read-eval-print 循环?

为了与我将要教授的课程一起使用,我正在为标准 ML 寻找快速编译器或字节码解释器。 我正在寻找快速编译时间;任何合理的运行时间都可以。如果编译模型简单明了,则有好处。班上的学生也将使用 MLton 生成好的二进制文件,但 MLton 编译速度很慢,而且有时学生需要可以与之交互的东西。

这是我已经知道的:

  • 新泽西的标准 ML 有一个交互式的 read-eval-print-loop,但是它的编译规则有点奇怪,而且有点慢。不过,它可能是领先的竞争者。

  • 莫斯科 ML 曾经是理想的,但它仍然没有被 2004 标准基础库更新。最不幸的是,因为除了许多其他优良特性之外,Moscow ML 还有一个交互式帮助系统——但我不能让我的学生使用一个编译器,它的库所做的事情与所有在线文档所说的不同。

  • Poly/ML 可能很符合要求,除了查看在线文档,我不知道如何编译它。那可能没问题。

目前,SML/NJ 或 Poly/ML 似乎是最好的折衷方案。自从我在标准 ML 方面做任何认真的工作以来已经有很多年了,我欢迎提供有关其他编译器的信息,或者根据您的经验,这些替代方案中的哪一个是交互最快且最容易学习使用的。

0 投票
1 回答
121 浏览

functional-programming - 查询 ML 中的类型表达式

全部,

这是我需要转换为 ML 表达式的类型表达式:

现在我知道这是一个带有 2 个参数的柯里化风格表达式:第一个参数 = 类型 int 和第二个参数 = 函数,它采用前一个 int 值两次并返回任何类型的列表

我很难弄清楚这样一个需要 aint和 return的函数'a list

我是 ML 的新手,因此这对其他人来说可能是微不足道的,但显然不是我。

任何帮助是极大的赞赏。

0 投票
3 回答
580 浏览

functional-programming - 在 ML 中导出类型表达式

全部,

我想在 ML 中导出以下函数的类型表达式:

现在我知道输入相同的内容会生成类型表达式。但我希望手动得出这些值。

另外,请提及派生类型表达式时要遵循的一般步骤。

0 投票
2 回答
626 浏览

data-structures - 权重偏左的堆:自上而下版本合并的优点?

我正在自学冈崎的纯功能数据结构,现在在练习 3.4中,它要求推理和实现一个权重偏左的堆。这是我的基本实现:

现在,在 3.4 (c) & (d) 中,它要求:

目前,merge以两种方式运行:由对 的调用组成的自上而下的传递merge,以及由对辅助函数的调用组成的自下而上的传递makeT。修改merge为在单个自上而下的传递中操作。自上而下的版本merge在惰性环境中会有什么优势?在并发环境中?

我通过简单的内联改变了merge函数makeT,但我看不到任何优点,所以我认为我没有掌握练习的这些部分的精神。我错过了什么?


我想我已经弄清楚了关于惰性评估的一点。如果我不使用递归合并来计算大小,那么在需要孩子之前不需要评估递归调用:

这就是全部?我不确定并发性。

0 投票
1 回答
1532 浏览

function - 标准 ML:返回不同的类型

我需要根据传递给另一个函数的函数返回不同的值。

所以,给定:fun inc x = x + 1;

和:fun double [] = [] | double (h::t) = 2*h::double (t);

您应该能够调用我正在使用的函数。

示例调用(我正在制作的函数名为 test):

test (inc, 5);- 它会返回6

-或者-

test (double, [1,2,3,4]);- 它会返回[2,4,6,8]

我知道函数不能从表面上做到这一点,但这可以通过抽象层实现吗?

0 投票
2 回答
10963 浏览

sml - SML 如何检查变量类型?

有没有办法检查/测试变量的类型?

我想像这样使用它:

0 投票
1 回答
3636 浏览

sml - SML如何在char列表上返回int?

我很难弄清楚如何将每个已处理的字符恢复为 int 值。

该函数应该像这样工作: val caesar = fn : int * int -> int

所以如果 k = 2466 并且 n = 2,那么输出应该是 4688

希望代码不会太奇怪(我是 SML 新手)。

0 投票
2 回答
816 浏览

sml - SML 如何减去 2 个列表并比较产品?

我正在尝试减去 2 个列表并返回比较的产品。

所以如果列表 a = [2,3,2] b = [1,1,1] 那么 ab = [1,2,1] 并且返回的产品 (c) 应该是 1。

modulo (mod) 10 适用于两个相减数得出奇数结果的情况,例如 2-8 = ~6 mod 10 = 4。

我被困在减法上,因为 List.map 不允许我做减法,因为它需要一个 int 值而不是一个 int 列表(至少不是我编码它的方式:()。

我对比较也是空白的。