当我计算检查次数以构建列表时,我出错了。
这是我的代码:
find(_R1, _R2, [], [],0).
find(R1, R2, [[Mark, CName] | T], L,N) :-
( (R1 =< Mark, Mark =< R2),N is N+1
-> L = [CName | L1]
; L = L1
),
find(R1, R2, T, L1,N).
我收到以下错误:
ERROR: is/2: Arguments are not sufficiently instantiated.
答案 0 :(得分:0)
N是N + 1在Prolog中总是假的,Prolog不是C,你必须写N1是N + 1,因为当N与一个值统一时,它不能被改变,所以N永远不等于N + 1。 你的代码必须这样写,必须在N的演算之前调用递归。
find(_R1, _R2, [], [],0).
find(R1, R2, [[Mark, CName] | T], L,N):-
find(R1, R2, T, L1,N1),
( (R1 =< Mark, Mark =< R2)
-> L = [CName | L1],N is N1+1
; L = L1, N = N1).
[编辑]在你的帖子中,当你调用N是N + 1时N没有值,因为N在 find(R1,R2,T,L1,N)的调用返回后得到一个值强>