Playing cards: Difference between revisions

Added Prolog implementation.
(→‎{{header|J}}: Retain arrays of suits and ranks in class)
(Added Prolog implementation.)
Line 1,422:
$d.shuffle;
say "Deck, re-shuffled: ", $d;</lang>
 
=={{header|Prolog}}==
 
{{works with|SWI Prolog|4.8.0}}
 
<lang Prolog>/** <module> Cards
 
A card is represented by the term "card(Pip, Suit)".
A deck is represented internally as a list of cards.
 
Usage:
new_deck(D0), deck_shuffle(D0, D1), deck_deal(D1, C, D2).
*/
:- module(cards, [ new_deck/1, % -Deck
deck_shuffle/2, % +Deck, -NewDeck
deck_deal/3, % +Deck, -Card, -NewDeck
print_deck/1 % +Deck
]).
 
%% new_deck(-Deck)
new_deck(Deck) :-
Suits = [clubs, hearts, spades, diamonds],
Pips = [2, 3, 4, 5, 6, 7, 8, 9, 10, jack, queen, king, ace],
setof(card(Pip, Suit), (member(Suit, Suits), member(Pip, Pips)), Deck).
 
%% deck_shuffle(+Deck, -NewDeck)
deck_shuffle(Deck, NewDeck) :-
length(Deck, NumCards),
findall(X, (between(1, NumCards, _I), X is random(1000)), Ord),
pairs_keys_values(Pairs, Ord, Deck),
keysort(Pairs, OrdPairs),
pairs_values(OrdPairs, NewDeck).
 
%% deck_deal(+Deck, -Card, -NewDeck)
deck_deal([Card|Cards], Card, Cards).
 
%% print_deck(+Deck)
print_deck(Deck) :-
maplist(print_card, Deck).
 
% print_card(+Card)
print_card(card(Pip, Suit)) :-
format('~a of ~a~n', [Pip, Suit]).
</lang>
 
=={{header|Python}}==
Anonymous user