Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- suites([diamonds, spades, hearts, clubs]).
- ranks([2, 3, 4, 5, 6, 7, 8, 9, 10, knave, queen, king, ace]).
- % Uppgift 1
- suit(S) :- suites(XS),
- member(S, XS).
- rank(S) :- ranks(XS),
- member(S, XS).
- card( c(X,Y) ) :- suit(X),
- rank(Y).
- % Uppgift 2
- % Desc: Hitta alla X i card(X), och spara i listan Cs
- deck(Cs) :- findall(X, card(X), Cs).
- % Uppgift 3
- % Desc: ex. Input: deck(X), shuffle(X,Y).
- % Tar ut ett visst antal bokstäver i en sträng
- take(0,_,[]).
- take(N,[X|XS],[X|YS]) :- N1 is N-1,
- take(N1,XS,YS).
- % Tar bort element ur en lista
- drop(0,R,R).
- drop(N,[_|XS],R) :- N1 is N-1,
- drop(N1,XS,R).
- % Använder take för att göra två strängar. Den tar en sträng tar ut hälften och gör en nu sträng av den
- split([],[],[]).
- split(C1, C2, C3) :- random(1,26,N),
- take(N,C1,C2),
- drop(N,C1,C3).
- % Slår ihop två strängar (1,2,3,4 och 5,6,7,8 blir 1,5,2,6,3,7,4,8)
- merge([],[],[]).
- merge([],[Y|Ys],[Y|Zs]) :- merge([], Ys, Zs).
- merge([X|Xs],[],[X|Zs]) :- merge(Xs, [], Zs).
- merge([X|Xs],[Y|Ys],[X,Y|Zs]) :- merge(Xs,Ys,Zs).
- % Shuffle binder ihop split och merge
- shuffle([], []).
- shuffle(C1, C2) :- split(C1, X, Y),
- merge(X, Y, C2).
- % Uppgift 4
- % Desc: ex. Input: deck(X), shuffle(X, X2), play(X2, Y).
- % Patiensen går ut om man blir av med alla korten. (Lista ett är den stängda högen och lista två den öppna)
- play([],[]).
- % Det översta kortet i den dolda högen dras och läggs överst på den öppna högen.
- %play([C|Xs],[Ys]) :- play([Xs],[C|Ys]).
- % Förtydligande genom bättre namn
- play([HEAD|CLOSED],[]) :- play(CLOSED, HEAD).
- play([HEAD|CLOSED],[OPEN]) :- play([CLOSED],[HEAD|OPEN]).
- % Om det första och fjärde kortet i den öppna högen har samma valör tas de första fyra korten bort ur den öppna högen.
- % play([_],[(c(_,Y)),_,_,(c(_,Y))|Xs]) :- play(_,Xs).
- % Förtydligande genom bättre namn
- play(CLOSED,[(c(_,Y)),_,_,(c(_,Y))|OPEN]) :- play(CLOSED,OPEN).
- % Om det första och fjärde kortet i den öppna högen har samma färg tas de två korten mellan dessa bort.
- %play([_],[(c(X,_)),_,_,(c(X,_))|Xs]) :- play(_,[(c(X,_)),(c(X,_))|Xs]).
- % Förtydligande genom bättre namn
- play(CLOSED,[(c(X,_)),_,_,(c(X,_))|OPEN]) :- play(CLOSED,[(c(X,_)),(c(X,_))|OPEN]).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement