问题标签 [mlton]
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.
sml - 如何在 mlton 中使用 smlnj-lib
我正在编译一个参考IntBinarySet
使用 MLton 的 SML 源文件。该代码使用 SML/NJ 运行良好,但是,当使用 MLton 编译时,它会报错Undefined structure IntBinarySet
。我需要以某种方式导入 smlnj-lib 吗?(我可以IntBinarySet
直接在 SML/NJ 中使用而无需use
-ing 或导入任何东西)
具体来说,我的源文件intset.sml
如下。
和 MLton 抱怨:
sml - 使用前定义类型
根据 MLton 文档:
标准 ML 要求在使用之前定义类型。[链接]
并非所有实现都强制执行此要求(例如,SML/NJ 没有),但上面链接的页面很好地说明了为什么可能需要它来保证健全性(取决于实现如何处理值限制),并且它符合定义中的一些评论:
尽管在我们的定义中没有假设,但每个上下文C = T , U , E都具有tynames E ⊆ T的属性。因此,可以松散地认为T包含所有“已生成”的类型名称。[…] 当然,就语义规则而言,关于“已生成”的内容的评论并不精确。但是下面的精确结果很容易证明:
令 S 是一个句子T , U , E ⊢短语⇒ A,使得词名E ⊆ T,并且让 S′ 是一个句子T ′, U ′, E ′ ⊢短语′ ⇒ A ′ 出现在 S 的证明中;然后还有tynames E ′ ⊆ T ′。
[第 21 页]
但我对此感到双重困惑。
首先——上述定理似乎倒退了。如果我正确理解“在 S 的证明中发生”这个短语,那么这似乎意味着(通过反证法)“一旦你的上下文违反了 tynames E ⊆ T的意图,所有后续上下文也将违反该意图”。即使这是真的,似乎断言相反会更有用和有意义,即“如果到目前为止所有上下文都符合 tynames E⊆ T 的意图,那么任何随后可推断的上下文也将符合该意图”。不?
其次 - MLton 的陈述和Definition的陈述实际上似乎都没有得到推理规则(或遵循它们的“进一步限制”)的支持。一些推理规则将“tynames τ ⊆ T of C ”或“tynames VE ⊆ T of C ”作为附带条件,但该程序不需要这些规则(在上面链接的文档中给出):
(特别是:规则 (4) 与 相关let
,规则 (14) 与 相关=>
,规则 (26) 与 相关rec
。本程序中均未使用这些。)
而从另一个方向来看,规则 (17) 涵盖了datatype
声明,只要求生成的类型名称不在C的T中;因此它不会阻止生成在现有值环境中使用的类型名称(除非 tynames VE ⊆ T of C已经是真的)。
我觉得我可能在这里遗漏了一些非常基本的东西,但我不知道它可能是什么!
javascript - 有没有办法利用 MLTon 将标准 ML 编译为 JavaScript?
我能想象的唯一方法是使用 Emscripten,但 MLTon 没有 LLVM 后端。有可能吗?
opengl - 如何从 svn 构建 sml3d?
我正在尝试从 SVN 源构建sml3d(还有其他方法吗?)。
首先,使用以下命令检查源代码,如下所示:
然后,我阅读 sml3d/README 'BUILDING FROM SVN' 部分并尝试...
在这一点上,我得到了很多错误......
接下来,我猜想正确的构建协议如下:
但是我得到了不存在和未定义的错误:
如何正确构建 sml3d ?
环境
我使用运行时/系统...
- smlnj 110.77
- 米尔顿 20130715
- linux x86
sml - mlton 给出与库相关的错误
当我尝试使用 编译程序时mlton
,出现错误。
据此,这意味着我应该安装libgmp3-dev
。我已经运行apt-get install libgmp3-dev
,并验证该文件/usr/include/x86_64-linux-gnu/gmp.h
存在,但仍然收到相同的错误。
知道我做错了什么吗?
c++ - 如何提高 PolyML 中的阵列基准性能?
我有以下基准,它遍历一个数组,将下一个条目设置为一个加上前一个条目。如果数字大于某个上限,我将条目设置为零,然后继续。然后最后我对数组中的条目求和。
问题:如何改进 PolyML 的基准测试结果?
Ubuntu x86-64 上的时间如下:
我可以让 mlton 的运行速度几乎与 c 代码 (5.2s) 一样快,但我对 PolyML 特别感兴趣,因为它可以在 Windows 7 中使用最新版本的 gcc 无缝构建。(有关使用 MSYS / MSYS2 和 mingw gcc 编译器在 Windows 7 上构建 polyML 的说明,请参见http://lists.inf.ed.ac.uk/pipermail/polyml/2015-August/001593.html)
在 Windows 7 上,我在使用最新版本的 gcc 构建最新版本的 mlton 时遇到问题(类似于 https://github.com/MLton/mlton/issues/61#issuecomment-50982499中的问题 )
SML 代码是:
C++代码是:
compilation - MLton 静态编译
我在标准 ML 中编译程序时遇到问题。
该程序运行良好,并且在我的本地机器上完美编译。但我希望能够静态编译它,以便在集群的其他地方执行它。
这是我用来编译程序的命令:
这是文件src/spartacus.mlb
:
这是编译最后一部分的 StackTrace :
我检查了MLTon 文档,但没有看到任何与静态编译相关的信息:/
如果有人知道该怎么做,那将对我有很大帮助!提前致谢,
此致;
编辑
在集群上,当我尝试执行 ./spartacus
ubuntu - MLton SML 编译器在 Bascinet 中构建失败
我正在尝试为班级设置工作区,而教授大多熟悉Windows系统。我真的更喜欢在 Linux 环境中进行开发。我目前正在运行 x32 位 Lubuntu 安装。我已经下载了最新版本的 MLton 并使用 Alien 安装了它。到目前为止,我的研究还没有成为解决这个错误的方法。
“/usr/bin/mlton” “-mlb-path-var” “TL /home/brasmussen/Applications/TL_System” “-mlb-path-var” “DOMAIN /home/brasmussen/Applications/PNF_Students” “-output” "/home/brasmussen/Applications/PNF_Students/Transformation/bin/parser" "-verbose" "1" "-const" "Exn.keepHistory false" "-profile" "no" "-profile-branch" "false" " -profile-stack" "false" "-profile-val" "false" "/home/brasmussen/Applications/TL_System/Parse/parser.mlb"
MLton 20130715(在 shadowvm01 上于 2013 年 7 月 16 日星期二 16:14:58 EDT 构建)
MLton 启动
编译 SML 启动
预编码开始
错误:/home/brasmussen/Applications/TL_System/Engine/ParserGenerator/auxiliary/bit-vector-set.sml 4.5。
变量都在签名中,但不是在结构中。
pre codegen 在 2.67 + 1.06 (28% GC) 中提出
提出的预代码生成:失败
编译 SML 在 2.67 + 1.06 (28% GC)
编译 SML 引发:失败
MLton 筹码 2.67 + 1.06 (28% GC)
MLton提出:失败
编译中止:详细报告的错误 [1] (0m 4s) BUILD FAILED (Mon Jan 30 21:47:41 CST 2017)
functional-programming - 二元多项式的霍纳规则
霍纳规则用于简化在特定变量值处评估多项式的过程。https://rosettacode.org/wiki/Horner%27s_rule_for_polynomial_evaluation#Standard_ML
我已经使用 SML 轻松地将该方法应用于一个变量多项式,表示为一个 int 列表:
这工作正常。然后我们可以使用以下方法调用它:
其中[1.0, 2.0, 3.0]
是表示多项式系数的列表,2.0
是变量 x 的值,是多项式求值17.0
的结果。
我的问题是这样的:我们有一个由(int list list)表示的两个变量多项式。高级列表中的第 n 项将表示包含 y^n 的所有多项式项,而低级列表中的第 m 项将表示包含 x^m 的所有多项式项。
例如:[[2],[3,0,0,3],[1,2]]
是多项式
( 2(x^0)(y^0) ) +
( 3(x^0)(y^1) + 0(x^1)(y^1) + 0(x^2)(y^1) + 3(x^3)(y^1) ) +
( 1(x^0)(y^2) + 2(x^1)(y^2) )
该函数需要返回指定 x 和 y 处的多项式的值。
我使用 mlton 编译器尝试了各种方法。
首先我尝试了一个嵌套的 foldr 函数:
/li>
您可以看到我正在尝试使用“s”作为累加器,就像在单变量示例中使用了“a”一样。由于 foldr 处理的每个元素本身都需要“折叠”,因此我在描述外部 foldr 的函数中再次调用 foldr。我知道这个内部文件夹工作正常,我在上面证明了这一点。*我的问题似乎是我无法访问外部文件夹所在的列表元素以将该列表传递到内部文件夹中。>查看我在内部文件夹中使用 li 的位置,这是我的问题。*
然后我尝试将我的单变量函数应用于映射。我遇到了同样的问题:
*通过这次尝试,我知道我得到了一个整数列表。我放入了一个 int 列表列表,其中内部列表被处理并由 foldr 作为整数返回到外部列表。在此之后,我将再次折叠以将 y 值应用于多项式。这里的函数应该看起来像 :: fn evalXY : (int list list) * int * int) -> ... -> int list *
我是 SML 的新手,所以也许我在这里遗漏了一些基本的东西。我知道这是一种函数式编程语言,所以我试图累积值而不是改变不同的变量,
types - 强制 SML 中 Real 中的实数相等
正如REAL 签名中所解释的,在 SML 中定义的实类型不是等式类型,因此以下表达式不会归约
但是,这并不方便,因为包含实数的数据类型和列表也会失去相等性。我需要重载多态相等性=
,Real.==
因此它也可以近似地考虑实数。
那可能吗 ?
编辑:编辑问题更清楚