All pastes #227827 Raw Edit

alexn

public text v1 · immutable
#227827 ·published 2006-10-29 17:00 UTC
rendered paste body
males([adam, bertil, cesar, david ,erik]).
females([victoria, cecilia, rut, siv, tyra]).

preflist(adam, [cecilia, tyra, victoria, rut, siv]).
preflist(bertil, [victoria, cecilia, rut, siv, tyra]).
preflist(cesar, [cecilia, rut, tyra, siv, victoria]).
preflist(david, [victoria, rut, cecilia, siv, tyra]).
preflist(erik, [tyra, rut, cecilia, victoria, siv]).

preflist(victoria, [erik, adam, david, bertil, cesar]).
preflist(cecilia, [david, erik, bertil, adam, cesar]).
preflist(rut, [adam, david, bertil, cesar, erik]).
preflist(siv, [cesar, bertil, david, adam, erik]).
preflist(tyra, [david, bertil, cesar, erik, adam]).

% p(Hs) :- Hs = [m(adam,_),m(bertil,_),m(cesar,_),m(david,_),m(erik,_)].

% Ge mig en stabil tuple-lista!
stablelist(Z):-
	males(X), females(Y), 
	generate(X, Y, Z),
	list(Z).

list([]).
list([T|H]):-
	sublist(H, T),
	list(H).

sublist([], _).
sublist([T|H], X):-
	\+ (unstablepair(T, X)),
	sublist(H, X).

% Are the relations unstable
unstablepair(m(A, B), m(C, D)):-
	prefers(A, D, B),
	prefers(D, A, C).
unstablepair(m(A, B), m(C, D)):-
	prefers(B, C, A),
	prefers(C, A, D).

% A prefers B over C?
prefers(A, B, C):-
	preflist(A,X),
	isbefore(X, B, C).

% is A before B in the list
isbefore([A|_], A, _).
isbefore([T|H], A, B):-
	\+ (T = B),
	isbefore(H, A, B).

% nedanför Lab3 ===============================

% Avgör om ett element finns i en lista.
member(X, [X|_]).
member(X, [_|Y]) :- 
	member(X, Y).

% Plockar bort ett element ur en lista.
select(X, [X|Tail], Tail).
select(X, [Head|Tail], MindreX) :-
    select(X,Tail, EttMindreX),
    MindreX = [Head|EttMindreX].

% Ger alla permutationer av en list
permutation([], []).
permutation(Xs, Ys) :-
    select(S, Xs, P),
    permutation(P,Y),
    Ys = [S|Y].

% Parar ihop alla element i två listor.
pair([], [], []).
pair([X|Xs],[Y|Ys],XYs) :-
    pair(Xs,Ys, Rest),
    XYs = [m(X,Y) | Rest ].

% Generar alla ihopparningar av element i två listor.
generate(Xs,Ys,XYs) :- 
    permutation(Ys, Res),
    pair(Xs, Res, XYs).