しばらくの間、次の問題を解決しようとしてきましたが、正しい解決策が見つからないようです。
X が数値の 1 つのペア、Y がペアのリスト、Z が推移的なペアの結果のリストである関数 test(X,Y,Z) があるとします。
例えば:
test((1,5), [(7,3),(5,2),(5,9)], Z).
Z = [(1,2),(1,9)]
(推移性のため 1->5->2 および 1->5->9)
これまでのところ、次のコードを作成できました。
test(_,[],_):- false.
test((X1,C),[(C,Y2)|_],(X1,Y2)).
test((X1,X2),[_|YT],Result) :- test((X1,X2),YT,Result).
次のように、個々の結果ペアを返します。
Z = (1, 2) ;
Z = (1, 9) ;
しかし、上記の例のように、それらすべてを 1 つのリストに返すことはできないようです。
Z = [(1,2),(1,9)]
どんな助けでも大歓迎です。