2

我想写这个:

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

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

仅一行。所以基本上是这样的:

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

我不知道如何在目标陈述中表达“与”。这可能吗?

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 回答