在我的搜索中,在子列表中,有人能告诉我我的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).
答案 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
。