错误条件,如果在prolog中

时间:2017-02-14 15:56:42

标签: prolog

在我的搜索中,在子列表中,有人能告诉我我的If else有什么问题。

因为当大小为0时,条件有效,但如果值变为1,2和3则表示错误,但关系运算符不正确?

如果变量长度为size = 0,则条件有效,但如果变量长度为3,则表示错误。

错误是:

异常:> = / 2:参数未充分实例化。

subList([], []). 
subList(List1,List2):-
      concatenate(List1,List2,Result1),
      equalelements(Result1,Result2),
      counting(Result2,Length),
      Length =< 2
   -> false
   ;  Length >= 3
   -> true.

searchdisease([],_).
searchdisease(Symptoms,Disease) :-
   disease(Ls, Disease),
   subList(Symptoms, Ls).

counting([ ],0).
counting([_| T], N) :-
   counting(T, N1),
   N is N1 + 1.

concatenate(L1, L2, NL) :-
   append(L1, L2, L12),
   msort(L12, NL).

1 个答案:

答案 0 :(得分:1)

这是运营商优先考虑的常见问题。请注意,Prolog会忽略您使用的精确缩进。相反,它需要考虑运营商。所以你需要相应地添加圆括号。

您最有可能想要以下内容:

subList([], []). 
subList(List1,List2):-
   concatenate(List1,List2,Result1),
   equalelements(Result1,Result2),
   counting(Result2,Length),
   (  Length =< 2
   -> false
   ;  Length >= 3
   -> true
   ).

另一方面,为什么不简单地将Length的比较替换为一个目标:Length >= 3