Prolog 计算生成列表的检查次数

Prolog 计算生成列表的检查次数,prolog,Prolog,我在计算支票数量以生成列表时出错 这是我的密码: 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). N是N+1在Prolog中总是错误的,Prolog

我在计算支票数量以生成列表时出错

这是我的密码:

  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).

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).
find(_R1,_R2,[]、[]、0)。
查找(R1,R2,[[Mark,CName]| T],L,N):-
查找(R1、R2、T、L1、N1),
((R1=L=[CName | L1],N是N1+1
;L=L1,N=N1)。

[编辑]在你的帖子中,当你调用N是N+1时,N没有值,因为N在调用find(R1,R2,T,L1,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).