构建多模块Mercury程序

时间:2014-11-09 02:04:31

标签: mercury

Q值。什么是构建双模块汞程序的简单模板? Module_1定义并导出一个简单的函数或谓词。 Module_2导入函数/谓词以计算有用的结果并输出结果。

2 个答案:

答案 0 :(得分:2)

我会使用以下方法,首先用模块定义模块 要导出的函数或谓词或谓词(接口部分):

% File: gcd.m

:- module gcd.

:- interface.
:- import_module integer.

:- func gcd(integer, integer) = integer.

:- implementation.

:- pragma memo(gcd/2).
gcd(A, B) = (if B = integer(0) then A else gcd(B, A mod B)).

使用gcd模块中导出的函数的文件(gcd / 2):

% File: test_gcd.m

:- module test_gcd.

:- interface.

:- import_module io.

:- pred main(io::di, io::uo) is det.

:- implementation.

:- import_module char.
:- import_module gcd.
:- import_module integer.
:- import_module list.
:- import_module std_util.
:- import_module string.

main(!IO) :-
    command_line_arguments(Args, !IO),
    ArgToInteger = integer.det_from_string `compose` list.det_index0(Args),

    A = ArgToInteger(0),
    B = ArgToInteger(1),

    Fmt = (func(Integer) = s(integer.to_string(Integer))),
    GCD = gcd(A, B),
    io.format("gcd(%s, %s) = %s\n", list.map(Fmt, [A, B, GCD]), !IO).

要在Windows上编译并运行(cmd.exe): 请注意,mmc也是一个Windows系统命令,所以请使用 Mercury分发安装程序提供的Mercury环境:

> mmc --use-grade-subdirs -m test_gcd
> test_gcd 12 4

在Linux / MacOS / etc(任何类似Bash的shell)上编译和运行:

$ mmc --use-grade-subdirs -m test_gcd
$ ./test_gcd 12 4

答案 1 :(得分:1)

我阅读了Mercury用户指南并了解了以下内容:

$“mmc -f module_1.m module_2.m”%不带引号

$“mmake module_2.depend”

$“mmake module_2”

它构建了一个可执行文件module_2,我执行了

$“./ modele_2”

它运作正常。当所有其他方法都失败时,请阅读手册。