Cómo utilizar y dentro de findall / 3 meta predicado
-
29-10-2019 - |
Pregunta
Me gustaría escribir esto:
paths( Result ) :-
findall( B, f(B) , Result ).
f( B ) :-
f1( B ),
f2( B ).
en una sola línea. Básicamente, algo como:
paths( Result ) :-
findall( B, f1(B) AND f2(B), Result ).
No sé cómo expresar "Y" en una declaración de objetivo. ¿Es esto posible en absoluto?
Solución
Solo coloque entre paréntesis:
paths(Result) :-
findall(B, (f1(B),f2(B)), Result).
Adición: Los objetivos son solo conjunciones (y disyunciones) de subobjetivos.Puede construirlos en algún momento y luego pasarlos hasta que se llamen.Esto es útil si el objetivo debe construirse de forma dinámica:
Goal = (f1(X), (f2(X) ; f3(X))),
findall(X, Goal, Result),
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow