标签: polyml

标准ML是否支持Unicode?

标准ML是否支持Unicode?

我相信它没有,但找不到任何SML说明这样的权威文档.

是或否是所有需要,但你必须知道一个事实.没有猜测或我相信答案.权威链接会更好.

sml polyml

12
推荐指数
1
解决办法
992
查看次数

从多个文件编译SML项目

我有一个包含许多文件的项目,我希望它能与大多数流行的编译器一起使用.

不幸的是,PolyML和SML/NJ需要use语句,而MosML还需要使用loadpoly或sml无法识别的基础库结构.

最重要的是,MLton和MLKit需要一个完全不同的.mlb文件,只需列出文件名,并且还需要显式导入基础库,这是以与MosML不同的方式完成的:

$(SML_LIB)/basis/basis.mlb
Run Code Online (Sandbox Code Playgroud)

是否有一些标准的通用"包含此文件"命令,如果它不存在,是否有其他方法让所有编译器从一个入口点文件中读取?

PS不会介意有人对编译器差异进行小吵闹.我总是对人们的想法感兴趣,而且没有太多可用的信息:-)

sml smlnj mlton polyml mosml

6
推荐指数
1
解决办法
288
查看次数

我不知道如何使用 PolyML 打开和运行 sml 文件

我对 SML 完全陌生,我不明白我应该做什么才能使用 PolyML 创建、编辑、编译和运行 sml 文件。我使用的是 Windows,我不知道是否需要下载另一个 IDE,或者一些开发工具包(例如 Java)。

我想创建定义一些函数的文件,然后由终端使用它们。

sml polyml

6
推荐指数
1
解决办法
796
查看次数

如何在polyml解释器中添加readline支持?

我发现这polyml是可以在Ubuntu上轻松安装的ML的实现(在存储库中命名为polyml并且可以执行poly).我正在按照安德鲁·卡明的" A Gentle Introduction to ML".经过几分钟的polyml解释器实验后,我发现它不支持readline (按向上箭头键会产生^ [[A]).

对于口译员来说,这似乎不正常.这应该只在没有安装readline的情况下发生,但我的Python解释器不会这样做.

linux ubuntu ml sml polyml

5
推荐指数
1
解决办法
634
查看次数

从Poly/ML中的源代码字符串获取解析树

我正在尝试编译一串源代码并使用Poly/ML打印解析树.以下代码编译,但解析树为空:

fun main () =
    let
        val stream = TextIO.openString "let val a = \"abc\"; val b = \"def\"; val c = a ^ b in print c end";
        val _ = PolyML.compiler (fn () => TextIO.input1 stream, []);
        val (_, parseTree) = !PolyML.IDEInterface.parseTree
    in
        PolyML.print (parseTree);
        PolyML.print (List.length parseTree);
        List.map PolyML.print (parseTree);
        ()
    end
Run Code Online (Sandbox Code Playgroud)

运行这个:

$ ./a.out
[...]
0
$
Run Code Online (Sandbox Code Playgroud)

从编译器获取解析树需要做什么?我还尝试使用CPCompilerResultFun编译器参数进行变体.但这也不起作用:

fun main () =
    let
        fun useTree (NONE, _) () =
            (PolyML.print "not parsed"; ())
          | …
Run Code Online (Sandbox Code Playgroud)

sml polyml

5
推荐指数
1
解决办法
213
查看次数

如何在 Windows 上访问 Poly/ML 中的库?

我已从“PolyML5.6-64bit.msi”安装程序安装了 Poly/ML;我可以通过在“开始”菜单中单击 REPL 来启动它;但我不知道如何从中访问任何库?我尝试这样做use "something",但它会导致如下错误:

\n\n
> use "Math";\nException-\n   Io\n     {cause = SysErr ("No such file or directory", SOME ENOENT), function =\n      "TextIO.openIn", name = "Math"} raised\n
Run Code Online (Sandbox Code Playgroud)\n\n

use "Basis"与或类似use "Windows"

\n\n

请注意,我对 SML 完全是新手;我似乎use在一些通用的 SML 教程中找到了该命令,但不知道我是否正确使用它:/

\n\n

编辑:另外,目标安装目录似乎只包含以下三个二进制文件,不确定那里是否应该有一些源:

\n\n
C:\\Program Files\\Poly ML>dir\n Volume in drive C is Windows\n Volume Serial Number is CENS-ORED\n\n Directory of C:\\Program Files\\Poly ML\n\n26.02.2016  00:03    <DIR>          .\n26.02.2016  00:03    <DIR>          ..\n25.01.2016  14:22           681\xc2\xa0472 PolyLib.dll\n25.01.2016  14:23         8\xc2\xa0182\xc2\xa0784 PolyML.exe\n25.01.2016  14:22 …
Run Code Online (Sandbox Code Playgroud)

sml polyml

5
推荐指数
1
解决办法
905
查看次数

如何在SML中将任何东西转换为字符串?

我正在尝试实现一个测试函数来比较并显示错误消息,如果它们不相等:

exception AssertionErrorException of string

fun assert(testName, actual, expect) : bool =
    if actual = expect
    then true
    else raise (AssertionErrorException (testName ^ " failed. actual: " ^ actual 
                ^ ", expect: " ^ expect ));
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我用非字符串参数调用它,它就不起作用:

assert("test1", SOME [], NONE);
Run Code Online (Sandbox Code Playgroud)

它无法编译,错误信息是:

Error: operator and operand don't agree [tycon mismatch]
  operator domain: string * string * string
  operand:         string * 'Z list option * 'Y option
  in expression:
    assert ("test1",SOME nil,NONE)
Run Code Online (Sandbox Code Playgroud)

怎么解决?

sml polyml

4
推荐指数
3
解决办法
5638
查看次数

在函数名称和结果范围限制之前键入变量

我最近注意到在函数声明中的函数名之前允许使用类型变量.但我看不出它是如何使用的.以下是使用它的一些示例:

Poly/ML 5.5.2 Release
> fun 'a print a = PolyML.print (a);
val print = fn: 'a -> 'a
> print "foo";
?
val it = "foo": string
> pint string "foo";
Error-Value or constructor (string) has not been declared
Found near print string "foo"
Static Errors
> string print "foo";
Error-Value or constructor (string) has not been declared
Found near string print "foo"
Static Errors
> val f : string -> string = print;
val f = fn: string …
Run Code Online (Sandbox Code Playgroud)

sml polyml

3
推荐指数
1
解决办法
177
查看次数

使用 Poly/ML 构建具有嵌套目录结构的项目

到目前为止,我一直在几个小项目中使用 Poly/ML,其中所有源代码文件都位于同一目录中。要构建这些项目,我所要做的就是在 REPL 中运行以下命令:

> PolyML.make "Main";
Run Code Online (Sandbox Code Playgroud)

但现在我有一个项目,其规模使得将所有源代码文件放在同一目录中是不切实际的。要在 REPL 中构建这些项目,我需要运行以下命令:

> PolyML.make "foo/Foo";
> PolyML.make "bar/Bar";
> PolyML.make "qux/Qux";
> PolyML.make "Main";
Run Code Online (Sandbox Code Playgroud)

随着子系统数量的增加,这不太实用。

有没有什么方法可以自动化在 Poly/ML 中使用嵌套目录结构构建项目的过程?


PD:我看过 SML/NJ 的 Compilation Manager 和 MLton 的 ML Basis 系统。虽然毫无疑问功能强大,但它们对于我的需求来说太复杂了。

build-automation build sml polyml

2
推荐指数
1
解决办法
428
查看次数

在SML中,为什么你不允许在模式中实现常量?

此代码不被接受;

> fun fact 0.0 = 1.0
Error-Real constants not allowed in patterns
> | fact n = n*fact(n-1);
Static Errors
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

constants sml polyml

2
推荐指数
1
解决办法
131
查看次数

标签 统计

polyml ×10

sml ×10

build ×1

build-automation ×1

constants ×1

linux ×1

ml ×1

mlton ×1

mosml ×1

smlnj ×1

ubuntu ×1