Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 2.46 KB | None | 0 0
  1. suites([diamonds, spades, hearts, clubs]).
  2. ranks([2, 3, 4, 5, 6, 7, 8, 9, 10, knave, queen, king, ace]).
  3.  
  4. % Uppgift 1
  5. suit(S)                                         :-      suites(XS),
  6.                                                         member(S, XS).
  7. rank(S)                                         :-      ranks(XS),
  8.                                                         member(S, XS).
  9.  
  10. card( c(X,Y) )                                  :-      suit(X),
  11.                                                         rank(Y).
  12.                        
  13. % Uppgift 2
  14. % Desc: Hitta alla X i card(X), och spara i listan Cs
  15. deck(Cs)                                        :-      findall(X, card(X), Cs).
  16.  
  17. % Uppgift 3
  18. % Desc: ex. Input: deck(X), shuffle(X,Y).
  19. % Tar ut ett visst antal bokstäver i en sträng
  20. take(0,_,[]).
  21. take(N,[X|XS],[X|YS])                           :-      N1 is N-1,
  22.                                                         take(N1,XS,YS).
  23.                                        
  24. % Tar bort element ur en lista
  25. drop(0,R,R).
  26. drop(N,[_|XS],R)                                :-      N1 is N-1,
  27.                                                         drop(N1,XS,R).
  28.  
  29. % 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
  30. split([],[],[]).
  31. split(C1, C2, C3)                               :-      random(1,26,N),
  32.                                                         take(N,C1,C2),
  33.                                                         drop(N,C1,C3).
  34.  
  35. % Slår ihop två strängar (1,2,3,4 och 5,6,7,8 blir 1,5,2,6,3,7,4,8)
  36. merge([],[],[]).
  37. merge([],[Y|Ys],[Y|Zs])                         :-      merge([], Ys, Zs).
  38. merge([X|Xs],[],[X|Zs])                         :-      merge(Xs, [], Zs).
  39. merge([X|Xs],[Y|Ys],[X,Y|Zs])                   :-      merge(Xs,Ys,Zs).
  40.  
  41. % Shuffle binder ihop split och merge
  42. shuffle([], []).
  43. shuffle(C1, C2)                                 :-      split(C1, X, Y),
  44.                                                         merge(X, Y, C2).
  45.  
  46. % Uppgift 4
  47. % Desc: ex. Input:  deck(X), shuffle(X, X2), play(X2, Y).
  48. % Patiensen går ut om man blir av med alla korten. (Lista ett är den stängda högen och lista två den öppna)
  49.  
  50. play([],[]).
  51.  
  52. % Det översta kortet i den dolda högen dras och läggs överst på den öppna högen.
  53. %play([C|Xs],[Ys])                              :-      play([Xs],[C|Ys]).
  54. % Förtydligande genom bättre namn
  55.  
  56. play([HEAD|CLOSED],[])                          :-      play(CLOSED, HEAD).
  57. play([HEAD|CLOSED],[OPEN])                      :-      play([CLOSED],[HEAD|OPEN]).
  58.  
  59. % 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.
  60. % play([_],[(c(_,Y)),_,_,(c(_,Y))|Xs])          :-      play(_,Xs).
  61. % Förtydligande genom bättre namn
  62.  
  63. play(CLOSED,[(c(_,Y)),_,_,(c(_,Y))|OPEN])       :-      play(CLOSED,OPEN).
  64.  
  65. % Om det första och fjärde kortet i den öppna högen har samma färg tas de två korten mellan dessa bort.
  66. %play([_],[(c(X,_)),_,_,(c(X,_))|Xs])           :-      play(_,[(c(X,_)),(c(X,_))|Xs]).
  67. % Förtydligande genom bättre namn
  68. play(CLOSED,[(c(X,_)),_,_,(c(X,_))|OPEN])       :-      play(CLOSED,[(c(X,_)),(c(X,_))|OPEN]).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement