Prolog——参数没有充分实例化
Prolog -- Arguments are not sufficiently instantiated
我正在尝试通过计算玩家和列来检查游戏中的 even/odd 玩家和 even/odd 列。在某些时候,我似乎没有正确实例化我的变量。
我是这样称呼游戏的:
playGame(Game):-
countPlayers(Game,TotalPlayers),
colSize(Game,TotalCols),
checkEvens(TotalPlayers,TotalCols);
checkOdds(TotalPlayers,TotalCols).
我认为问题在于未正确分配 TotalPlayers 和 TotalCols。
我尝试查看其他问题,但问题似乎有所不同。我是 prolog 的新手,可能在某处犯了一个小错误。
经过一些追踪,似乎是输入 odd/even 的组合时导致错误。给定两个偶数或两个奇数的输入,程序将按预期运行。给定一个奇数和一个偶数的输入,它会中断。
完整错误:
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [11] 1 is _34862 mod 2
ERROR: [10] checkOdds(_34894,_34896)
?- X = 3, between(1, X, 2), between(1, X, 3).
X = 3.
?- X = 3, between(1, X, 2); between(1, X, 3).
X = 3 ;
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [9] between(1,_7656,3)
ERROR: [7] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
你能看出这是怎么回事吗?
像这样的谓词:
foo :- a, b; c.
等同于:
foo :- a, b.
foo :- c.
换句话说,a, b
确实与c
处于不同的"context"。
通常,您的意思是说 a, (b ; c)
。这就是为什么 ;
通常放在该行的开头,并且您确实在它周围使用了括号。所以它要么是
( a,
b
; c
)
或
a,
( b
; c
)
(这不是一回事!)
这绝对令人困惑:
a,
b;
c
你看不到 "good" 这样写的 Prolog 代码(比如库代码)。
但实际上,尝试阅读教科书之类的东西,Whosebug 可以很好地找出错误所在,但不能用于真正的学习。
我正在尝试通过计算玩家和列来检查游戏中的 even/odd 玩家和 even/odd 列。在某些时候,我似乎没有正确实例化我的变量。 我是这样称呼游戏的:
playGame(Game):-
countPlayers(Game,TotalPlayers),
colSize(Game,TotalCols),
checkEvens(TotalPlayers,TotalCols);
checkOdds(TotalPlayers,TotalCols).
我认为问题在于未正确分配 TotalPlayers 和 TotalCols。
我尝试查看其他问题,但问题似乎有所不同。我是 prolog 的新手,可能在某处犯了一个小错误。
经过一些追踪,似乎是输入 odd/even 的组合时导致错误。给定两个偶数或两个奇数的输入,程序将按预期运行。给定一个奇数和一个偶数的输入,它会中断。
完整错误:
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [11] 1 is _34862 mod 2
ERROR: [10] checkOdds(_34894,_34896)
?- X = 3, between(1, X, 2), between(1, X, 3).
X = 3.
?- X = 3, between(1, X, 2); between(1, X, 3).
X = 3 ;
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [9] between(1,_7656,3)
ERROR: [7] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
你能看出这是怎么回事吗?
像这样的谓词:
foo :- a, b; c.
等同于:
foo :- a, b.
foo :- c.
换句话说,a, b
确实与c
处于不同的"context"。
通常,您的意思是说 a, (b ; c)
。这就是为什么 ;
通常放在该行的开头,并且您确实在它周围使用了括号。所以它要么是
( a,
b
; c
)
或
a,
( b
; c
)
(这不是一回事!)
这绝对令人困惑:
a,
b;
c
你看不到 "good" 这样写的 Prolog 代码(比如库代码)。
但实际上,尝试阅读教科书之类的东西,Whosebug 可以很好地找出错误所在,但不能用于真正的学习。