在 SWI Prolog 中, list(Xs):- length(Xs, _). 是“纯粹的”,因为我可以将具有任何类型实例化的变量传递给它,并且它将不确定地将它与特定长度的所有最通用的统一符统一起来。 是否可以在 Mercury 中编写纯list/1 ? 该手册似乎暗示可以做到这一点,但我在 ...
在 SWI Prolog 中, list(Xs):- length(Xs, _). 是“纯粹的”,因为我可以将具有任何类型实例化的变量传递给它,并且它将不确定地将它与特定长度的所有最通用的统一符统一起来。 是否可以在 Mercury 中编写纯list/1 ? 该手册似乎暗示可以做到这一点,但我在 ...
我有一个模块导出nat/1来测试/生成自然数: 和同一目录中的主模块进行尝试: 我运行mmc --make-int nat.m成功生成了接口文件,但是当我运行mmc main.m时出现以下错误: 我version 20.06.1, on x86_64-pc-linux-gnu 。 我错过了一些明显的 ...
上下文是一个谓词系统:规则和事实,它们根据客户的情况共同决定支付给客户的金额。 大多数规则和事实在编译时是已知的,但有关特定情况的事实仅在运行时处理支付请求时才知道。 我知道如何在 Mercury 中对系统进行编程,以防所有谓词在编译时都已知(即是源代码的一部分),但我不知道如何在运行时引入谓词。 ...
我正在浏览 Mercury 编程语言的关于页面时,发现其中有一段内容: Mercury 是一种强模式化的语言 这是什么意思!? 我在互联网上搜索了所有内容,都没有找到答案! ...
如果列表L中的N个数字恰好等于 1,我已经编写了以下谓词exactly/2 : 例如,调用exactly(X, [1, 0, 0, 1, 0, 1])会将X绑定到3 。 我想创建类似的东西,但对于谓词:我想编写一个谓词,如果列表L中的N个目标成功,则该谓词成功。 例如,调用exactly(X ...
在Mercury中,假设您处于det谓词中,并且想要按以下方式调用nondet谓词。 如果没有解决方案,则需要Result = [] ; 如果有一个或多个, Result = [FirstSolution]想要第一个,例如Result = [FirstSolution] 。 nondet谓 ...
我知道一点 Prolog,经常使用 CLP(FD) 等。这篇论文(显然是 2006 年写的)表明 Mercury 现在也有约束求解。 我在图书馆参考手册中发现了一些关于它的提及。 但是,我找不到如何使用它。 例如: 给出编译器错误 但是在 Prolog 中,使用 clpfd, 工作正常, ...
编译源代码时,出现以下错误:在函子`source / 1'的参数中键入error 编译器可以正确确定参数的类型,但是会继续尝试使用其他记录中的字段。 怎么了? ...
如何在Mercury中指定编译时间定义? 我希望构建系统从配置文件中读取版本号,并将其传递到模块中,以供谓词和函数访问。 例如,在C语言中,我将执行以下操作:gcc -DVERSION =“ 1.2.0”,然后在源代码中使用新定义的宏VERSION。 ...
(以下摘录来自该测试套件 ,它是此处找到的两个文件程序的一半。) 我用两种方式定义了一个辅助谓词:一次是在顶层(称为helper ),一次是作为lambda(称为Helper )。 在下面的代码的最后三行中,我使用了该辅助谓词。 如果使用helper程序,则可以使用,但是如果使用Hel ...
我正在努力学习Mercury 。 我一直在处理列表,但我无法获得看似简单的统一工作。 这是我简化的示例案例: 在List = [1,2]我收到以下错误(已格式化并稍作编辑): 不过,这似乎不对; 特别是[1,2]的实例化。 这是一个字面意思; 它的实例化不应该像list.'[|]'( uni ...
我采取了以下步骤: 但是Windows会弹出一个Microsoft管理控制台对话框。 如何在.m文件中调用Melbourne Mercury 14编译器? 先前的stackoverflow问题是针对Mercury 11.07.1的,它引用了Mercury 14中没有的README ...
我对Mercury和逻辑编程很新。 我没有在文档或示例中找到这样的数字示例...... 以示例谓词为例: 有了这个,A必须被磨削,B是自由的。 如果我希望A自由并且B要被接地(例如,添加mode diffThirtyFour(out,in) is det. ) mode dif ...
我是 Mercury 语言的完全初学者,虽然我之前学习过 Prolog。 水星的新方面之一是真皮主义。 main函数必须是确定性的。 为了做到这一点,我必须检查一个变量是否统一/绑定到一个值,但我找不到如何做到这一点。 特别看代码: 这样的main不会失败,即它会(我猜)满足确定性约束。 所以 ...
我有一个从其他文件导入模块的汞程序。 我希望能够将此文件放在子目录中。 我怎样才能做到这一点? 我正在使用mmc -E --make --trace deep filename来制作程序。 我看过构建多模块Mercury程序,但它似乎没有处理子目录问题,尽管我可能错了。 ...
我是水银的新手,我正试图围绕记录语法 ,但参考手册是我遇到它的唯一地方,它让我感到神秘: 术语^ field1(Arg1)^ field2(Arg2,Arg3)等同于field2(Arg2,Arg3,field1(Arg1,Term))。 有人可以帮助一个真实世界的例子吗? ...
在io.write_list(List(integer),“,”,OutputPred,!IO)中,什么是OutputPred? 我正在尝试显示整数类型的列表。 该列表最初从不为空。 ...
如何将太长的行继续到下一行? 我尝试使用反斜杠,但Mercury编译器不接受该约定。 一直找不到这个平凡问题的答案。 ...
寻找帮助来声明谓词的谓词,该谓词可以导入或输出列表。 我试过:-pred name(list :: in,integer :: out)是多的。 并且编译器错误消息说无法识别list / 0。 检查了库模块列表,发现我应该写类似...(list(T):: in .....)的东西,但是并没 ...