2

私はこれを書きたいです:

paths( Result ) :-
    findall( B, f(B) , Result ).

f( B ) :-
    f1( B ),
    f2( B ).

たった一行で。つまり、基本的には次のようなものです。

paths( Result ) :-
    findall( B, f1(B) AND f2(B), Result ).

ゴールステートメントで「AND」を表現する方法がわかりません。これは可能ですか?

4

1 に答える 1

6

かっこを付けるだけです。

paths(Result) :-
    findall(B, (f1(B),f2(B)), Result).

追加: 目標は、サブ目標の単なる論理積(および論理和)です。ある時点でそれらを作成し、呼び出されるまでそれらを渡すことができます。これは、目標を動的に構築する必要がある場合に役立ちます。

Goal = (f1(X), (f2(X) ; f3(X))),
findall(X, Goal, Result),
于 2012-01-17T06:06:28.560 に答える