首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Prolog错误: is/2:参数未被充分实例化

Prolog错误: is/2:参数未被充分实例化
EN

Stack Overflow用户
提问于 2016-11-09 04:29:05
回答 1查看 2K关注 0票数 4

我对Prolog很陌生。我写了一个非常短的程序如下:

代码语言:javascript
复制
plus(X,Y,R):- R is X+Y.

当我运行它时,我会遇到以下问题:

代码语言:javascript
复制
?- plus(1,1,2).
true
?- plus(1,1,X).
X=2
?- plus(1,X,2).
ERROR: is/2: Arguments are not sufficiently instantiated

为什么会发生错误?如何修改代码以实现相同的目标?谢谢你们帮助我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-09 06:05:34

这不起作用的原因是is/2是(类似)一个函数。给定X,Y计算X+Y并将其存储到R(它用X+Y实例化R)。如果提供了R,并且X或Y是一个变量(还没有实例化),那么它如何计算X+Y,这就是为什么实例化错误。

要解决这个问题,您应该使用一些关系更紧密的模块:CLPFD。

代码语言:javascript
复制
:- use_module(library(clpfd)).

plus(X,Y,R):- R #= X+Y.

下面是一些例子:

代码语言:javascript
复制
**?- [ask].
true.
?- plus(1,1,2).
true.
?- plus(1,1,X).
X = 2.
?- plus(1,X,2).
X = 1.
?- plus(X,Y,2).
X+Y#=2.
?- plus(X,Y,R).
X+Y#=R.**

在最后一个例子中,你可以看到X,Y和R是如何联系在一起的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40500184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档