2

私は2つの述語を持っています:

foo(Y,X)
bar(Y,Z)

foo を実行した後、 Y のすべての可能性を指定して bar を実行するにはどうすればよいですか?

例:

foo(Y, key) % all possibilities of Y => chat 
            %                           faq 
            %                           about
            %                           search

これらすべての可能性でバーを実行するにはどうすればよいですか?

bar(chat, Z)
bar(faq, Z)
bar(about, Z)
bar(serach, Z)

そして、すべての結果をZリストに保存しますZsか?

4

3 に答える 3

0
allZs(X, Zs) :-
    setof(Y, foo(Y, X), Ys),
    maplist(bar, Ys, Zs).

関連する SWI-Prolog man ページ: Finding all Solutions to a Goalライブラリが適用されます

注: 通常、Prolog では、出力引数の前に入力引数を配置するという慣例があります。最初の述語ではfoo(X, Y)foo(Y, X). さらに、ここでは推移性の概要を示しますfoo(X, Y), bar(Y, Z).

于 2012-06-01T08:53:18.653 に答える