Prolog 如何使用findall/3元谓词及其内部

Prolog 如何使用findall/3元谓词及其内部,prolog,prolog-findall,Prolog,Prolog Findall,我想这样写: paths( Result ) :- findall( B, f(B) , Result ). f( B ) :- f1( B ), f2( B ). 就一行。 基本上是这样的: paths( Result ) :- findall( B, f1(B) AND f2(B), Result ). 我不知道如何在目标陈述中表达“和”。 这可能吗?只需在其周围加上括号: paths(Result) :- findall(B, (f1(B),f

我想这样写:

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

f( B ) :-
    f1( B ),
    f2( B ).
就一行。 基本上是这样的:

paths( Result ) :-
    findall( B, f1(B) AND f2(B), Result ).
我不知道如何在目标陈述中表达“和”。
这可能吗?

只需在其周围加上括号:

paths(Result) :-
    findall(B, (f1(B),f2(B)), Result).
添加: 目标只是子目标的连接(和分离)。您可以在某个点构造它们,然后传递它们,直到调用它们为止。如果需要动态构建目标,这非常有用:

Goal = (f1(X), (f2(X) ; f3(X))),
findall(X, Goal, Result),