2016-12-31 12 views
1

与えられたのはリストと2つの要素です。最初に、2つの要素がリストの一部であるかどうかを確認する必要がありました。その後、要素Elem2
が指定されたリストのElem1の後に来るかどうかを確認する必要がありました。 私が使用している述語は、引数が3つのweiterHintenです。要素がリスト内の別の要素の背後にあるかどうかを確認する述語

例:cがリストの[a、c、b、a]の後にbかどうかを確認します。

weiterHinten([H|T],H,B). 
weiterHinten([H|T],A,B):-weiterHinten(T,A,B). 

weiterHinten([a,c,b,a],b,c). 

この目標は、私は、リストのヘッダーがあることを見つけた後Aに等しいことを私はBは、リストの末尾のメンバーであるかどうかを確認する必要があるだろう、false.Iが知って返す必要があります。そうであれば、それはBがAの後ろにあることを意味しますが、私はこれを行う方法がわかりません。

は、私が試した:

weiterHinten([H|T],H,B):-member(B,T). 

をしかし、私は目標を呼んでいた時はいつでもElem1

+0

ている私はあなたの質問が何であるかわかりません。 「それはこの方法では動作していません」と指定すると、実際には意味があります。それは何をしているのですか?とにかく、私は答えようとしました、それが助けられたら教えてください。 – user7610

+0

私は目標を呼んでいるときはいつも、Elem2がListのElem1の後ろにあったかどうかにかかわらず、いつも真実に戻っていたことを意味しました。例えば、この目標:?weiterHinten([a、c、b、a]、b、c)。そうでないとしても、真実に戻った。 – UserMeli

答えて

1

weiterHinten([H|T],H,B).ルールを除外した後Elem2であった場合、それはいつも私のために関係なくtrueを返しました。これはweiterHinten([H|T],H,B) :- true.の構文上のショートカットであり、それはナンセンスです。

これは私のために働いている:

weiterHinten([H|T],H,B) :- member(B, T). 
weiterHinten([H|T],A,B) :- weiterHinten(T,A,B). 

結果は

| ?- weiterHinten([a,c,b,a],b,c). 

no 
| ?- weiterHinten([a,b,c,a],b,c). 

true 
+0

これは実際に動作します。どうもありがとうございます ! – UserMeli

関連する問題