2017-09-08 7 views
0

私は最近、大学でプロローグを学び始めました(1週間で)。Prolog。 2つのリストを取るための割り当てを持っています。前記リスト内のメンバーが一致するかどうかをチェックする。そして、これらのメンバーを新しいリストに入れてください。

などです。

L=[a,b] or L=[b,a]. 

私は時間のためにしようとしてきた、まだそれを動作させることはできません。

intersect([a,b,d], [b,c,a,l], L). 

を出力する必要があります。私は自分でそれを把握したいが、実際には正しい方向にいくつかのポインタを使うことができる。

ご参考まで:私はメンバー/ 2をビルトインとしてのみ使用できます。私は他の組み込み述語を使用することはできません。

+3

試したことを表示できますか?遭遇した問題は何ですか? Prologで実装しているかどうかにかかわらず、そのようなアルゴリズムがどのように機能するのでしょうか? –

+0

@WillemVanOnsem。はい、私は最初に私がしたいくつかのベースケースを作成する必要があると信じています。 '([]、[]、[])。'これは、提供されるリストが空の場合、プロローグは空のリストを返すようにします。それから私はベースケースを作成しました」([X]、[X]、[X])。これは、基本的には、2つのリストが単一のメンバーで構成され、そのメンバーが同じであると言います。プロローグはそのメンバーを返すべきです。それから私は立ち往生した。私は、Xのリストをチェックし、見つかったXの最初のインスタンスを削除してから停止するプログラムを作成しました。また、Xのリストをチェックし、見つかったXのインスタンスをすべて削除するプログラムを作成しました。 – PEREZje

+0

試したことの例がある場合は、質問を編集して更新してください。コメントにコードを入れないでください。 – lurker

答えて

0
inters([H1|T1],L2,[H1|L]):- 
         member(H1,L2), 
         inters(T1,L2,L). 
inters([H1|T1],L2,L3):- 
         not(member(H1,L2)), 
         inters(T1,L2,L3). 
inters([],_,[]). 

、あなたはあなたの質問を行うことができます:あなたは私は「あなたはパラメータの間に持っていたすべてのスペースを削除しまし参照として?- inters([a,b,d],[b,c,a,l],L). を。

関連する問題