【问题标题】:Poly/ML Exception Cast "toAddress" raised提出了 Poly/ML 异常转换“toAddress”
【发布时间】:2018-06-17 18:03:05
【问题描述】:

使用 Poly/ML,我想编写一个函数来使用 Array of Arrays 构造一个 n*n 单位矩阵。

我写道:

fun equiv x y = if x = y then 1 else 0;
fun idmatrix n = Array.tabulate(n, fn i => (Array.tabulate(n, equiv i)));

编译成功,给

> val equiv = fn: ''a -> ''a -> int
> val idmatrix = fn: int -> int array array

但是当我调用 idmatrix

idmatrix 2;

对于一个测试,编译器的输出是

> Exception- Cast "toAddress" raised

请谁能解释一下为什么引发异常?

非常感谢!

【问题讨论】:

    标签: sml polyml


    【解决方案1】:

    您的代码对我来说很好用。看the code that raises the exception,可能是32/64位地址问题?您的 Poly/ML 是否针对正确的架构进行编译?

    聚/ML:

    $ poly
    Poly/ML 5.2 Release
    > fun equiv x y = if x = y then 1 else 0;
    val equiv = fn : ''a -> ''a -> int
    > fun idmatrix n = Array.tabulate(n, fn i => (Array.tabulate(n, equiv i)));
    val idmatrix = fn : int -> int Array.array Array.array
    > idmatrix 3;
    val it = fromList[fromList[1, 0, 0], fromList[0, 1, 0], fromList[0, 0, 1]]
    : int Array.array Array.array
    

    莫斯科机器学习:

    $ mosml
    Moscow ML version 2.10
    Enter `quit();' to quit.
    - fun equiv x y = if x = y then 1 else 0;
    > val ''a equiv = fn : ''a -> ''a -> int
    - fun idmatrix n = Array.tabulate(n, fn i => (Array.tabulate(n, equiv i)));
    > val idmatrix = fn : int -> int array array
    - idmatrix 3;
    > val it = <array> : int array array
    

    和 SML/NJ:

    $ sml
    Standard ML of New Jersey v110.76 [built: Sun Jun 29 03:29:51 2014]
    - fun equiv x y = if x = y then 1 else 0;
    stdIn:1.23 Warning: calling polyEqual
    val equiv = fn : ''a -> ''a -> int
    - fun idmatrix n = Array.tabulate(n, fn i => (Array.tabulate(n, equiv i)));
    [autoloading]
    [library $SMLNJ-BASIS/basis.cm is stable]
    [autoloading done]
    val idmatrix = fn : int -> int array array
    - idmatrix 3;
    val it = [|[|1,0,0|],[|0,1,0|],[|0,0,1|]|] : int array array
    

    【讨论】:

    • 啊,我重新启动了我的 Poly/ML,它成功了。然后我意识到,在上一个会话中,我在 PolyML.Debug 工具中将“trace”设置为 true,但忘记将其关闭。我猜当编译器跟踪函数时,发生了一些不好的事情(内存不足?)但是非常感谢您耐心地测试它们:)
    猜你喜欢
    • 2013-07-08
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2012-08-03
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多