Como usar e dentro de findall / 3 meta predicado
-
29-10-2019 - |
Pergunta
Eu gostaria de escrever isto:
paths( Result ) :-
findall( B, f(B) , Result ).
f( B ) :-
f1( B ),
f2( B ).
em apenas uma linha. Então, basicamente algo como:
paths( Result ) :-
findall( B, f1(B) AND f2(B), Result ).
Não sei como expressar 'E' em uma declaração de meta. Isso é possível?
Solução
Basta colocar parênteses ao redor:
paths(Result) :-
findall(B, (f1(B),f2(B)), Result).
Adição: Metas são apenas conjunções (e disjunções) de sub-metas.Você pode construí-los em algum ponto e depois distribuí-los até que sejam chamados.Isso é útil se a meta precisa ser construída dinamicamente:
Goal = (f1(X), (f2(X) ; f3(X))),
findall(X, Goal, Result),
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow