Comment detail

与えた条件を満たす候補 (Nested Flatten)
?- solve([and, or, not, and]).
[true, true, true, true]
[true, true, fail, true]
[true, fail, fail, true]
[fail, true, fail, true]
[fail, fail, fail, true]

と言う感じです。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
solve(Ps) :-
	forall((tf(Ps, Pt, T, X), solve(Pt, T, Xs)),
	       writeln([X|Xs])).

solve([], T, []) :-
	T, !.
solve([P|Ps], T, [X|Xs]) :-
	tf(Ps, Pt, U, X),
	(   P = and -> solve(Pt, (T,U), Xs)
	;   P = or  -> solve(Pt, (T;U), Xs)
	).

tf([not|Ps], Pt, \+T, X) :-
	!, tf(Ps, Pt, T, X).
tf(Ps, Ps, X, X) :-
	member(X, [true, fail]).

Index

Feed

Other

Link

Pathtraq

loading...