0

使用仿函数编译 Oz 代码时,在声明“仿函数”的行上出现错误“非法使用嵌套标记”。这意味着什么?

functor
export
    sum:Sum
    divisao:Div
    mult:Mult
    sub:Sub
define
    fun {Sum X Y} X + Y end
    fun {Mult X Y} X * Y end
    fun {Sub X Y} X - Y end
end
4

1 回答 1

0

首先,您缺少 Div 的定义。

functor
export
   sum:Sum
   divisao:Div
   mult:Mult
   sub:Sub
define
   fun {Sum X Y} X + Y end
   fun {Mult X Y} X * Y end
   fun {Sub X Y} X - Y end
   fun {Div X Y} X / Y end
end

functors 意味着定义导入和导出的模块,作为文件。您应该编译该文件并将其转换为模块。例如,调用您的文件 test.oz 并运行以下命令进行编译和运行。

ozc -c test.oz && ozengine test.ozf

如果您通过向编译器提供缓冲区来运行 Mozart,则不能直接使用functor,因为您必须将其转换为模块。您必须先声明它,然后使用 Module.manager 应用它。

declare F M ModMan
F = functor
    export
        sum:Sum
        divisao:Div
        mult:Mult
        sub:Sub
    define
        fun {Sum X Y} X + Y end
        fun {Mult X Y} X * Y end
        fun {Sub X Y} X - Y end
        fun {Div X Y} X / Y end
    end

% To use the functions of the functor, apply it and create a module
ModMan = {New Module.manager init}
M = {ModMan apply(F $)}

% Then use the exported functions with module M
% Example:
{Show {M.sum 3 5}}
% >>> 8

于 2022-01-17T11:08:35.447 回答