2017-02-14 7 views
1

私の検索で他に見つかった場合は、サブリストの何が間違っているのか教えてもらえますか?プロローグ内に他の人がいる場合のエラー条件

サイズが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

Lenghtはリストのサイズの戻り値です。サイズは0、返されるサイズは1、サイズは2,3,4などです。リストのサイズが以下かどうかをチェックします。 2以上、または3に等しい。 –

+0

私はあなたのルールをインデントしました:今度は、 'Length'が' Length> = 3'に対してインスタンス化されていないことがわかります – false

+0

Lengthは述語の戻り値です。 。 –

答えて

1

これは、オペレータの優先順位によくある問題です。 Prologは、使用する正確なインデントを無視します。代わりに、オペレータを考慮に入れます。したがって、それに応じて丸括弧を追加する必要があります。

おそらくあなたは次のことをしたい:Length >= 3

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

、なぜ単に一つの目標でLengthのための比較を交換しないで。

+1

これはうまくいきました。ありがとうございました。 –

関連する問題