2016-05-21 16 views
1

私は検索してきましたが、私の質問に正しい答えが見つかりません。Prolog findall述語のリスト

問題がある:

述語

initial_estates([rb(1,1),rb(2,2),rb(3,5)]). 

私は私のRBのすべての第2項のリストを取得するためのfindAll使用したいです。

この例のように、[1,2,5]

誰でも

答えて

1

あなたがリストを使用することができますすることができます:対話的にペアのすべての値がリストに/ 2をrbは見つけるために、メンバー/ 2:

?- initial_estates(L),member(rb(X,Y),L). 
L = [rb(1,1),rb(2,2),rb(3,5)], 
X = Y = 1 ? ; 
L = [rb(1,1),rb(2,2),rb(3,5)], 
X = Y = 2 ? ; 
L = [rb(1,1),rb(2,2),rb(3,5)], 
X = 3, 
Y = 5 ? ; 
no 

そして、もう一つのリスト(Res)に全ての第2の要素(Y)を取得することのfindAllに基づく:

?- findall(Y,(initial_estates(L),member(rb(X,Y),L)),Res). 
Res = [1,2,5] 
その後、

rb_2nd(rb(X,Y),Y). 

して適用し使用します。:

また、あなたはまた、2番目の引数は最初の引数であるペアの2番目の要素であると説明している、/ 2をrb_2nd言う述語を書くことができmaplist/3:first_estates/1で記述されたリストにその関係を適用する:findall/3を使用したクエリよりも後者が読みやすくなることがわかります。

+0

ありがとうございました!出来た – FredCC