2012-01-17 11 views
3

の内側に私はこれを書きたいと思います:はどのように使用するとのfindAll/3メタ述語

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

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

をちょうど1行で。私は目標文で表現する「AND」する方法がわからない

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

:よう だから、基本的に何か。 これはまったく可能ですか?

答えて

7

はちょうどそれの前後に括弧を挿入:

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

追加: 目標はただのサブ目標の接続詞(および選言)です。ある時点でそれらを構築し、呼び出されるまでそれらを渡すことができます。これは、目標を動的に構築する必要がある場合に便利です。

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

parantheses .. ofcourse;)ありがとう! – Antiz

関連する問題