Declaratieve Talen/oplossingenSluiting

Uit Wina Examenwiki
Versie door 10.92.118.11 (overleg) op 17 jan 2009 om 15:18 (Nieuwe pagina: <pre> % -- Deel 1 sluiting(Waar, Regels, Sluiting) :- select(Cond >> Cons, Regels, RemainingRegels), member2(Cond, Waar), !, append(Waar, Cons, NewWaar0), list_to_set(NewWaar...)
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen
% -- Deel 1
sluiting(Waar, Regels, Sluiting) :-
		select(Cond >> Cons, Regels, RemainingRegels),
		member2(Cond, Waar), !, 
		append(Waar, Cons, NewWaar0),
		list_to_set(NewWaar0, NewWaar1),
		sluiting(NewWaar1, RemainingRegels, Sluiting).
sluiting(X, _, X).

member2(L1, L2) :- intersection(L1, L2, L1).

% -- Deel 2

alleredundante(F, X) :-
	findall(Pad,
	(
		select(Cond >> Cons, F, AndereRegels),
		isredundant(Cond, AndereRegels, Cons, Pad0),
		Pad = redundant(Cond >> Cons, Pad0)
	),
	List),
	list_to_set(List, X).

isredundant(From, Regels, To, Pad) :-
	select(Cond >> Cons, Regels, AndereRegels),
	(
		member2(To, Cons) ->
			Pad = [Cond >> Cons],
			From = Cond
		;
			isredundant(From0, AndereRegels, To, Pad0),
			(
				member2(From0, Cons) ->
					Pad = [Cond >> Cons | Pad0],
					From = Cond
			;
				Pad = Pad0,
				From = From0
			)
	).