Playing cards: Difference between revisions

This is actual, idiomatic Clojure
m (→‎{{header|Sidef}}: modified the code to work with the latest version of Sidef)
(This is actual, idiomatic Clojure)
Line 763:
8 of ♠, 10 of ♥, 3 of ♠, 10 of ♣, 9 of ♥, 10 of ♠, 3 of ♣, J of ♠, K of ♣, K of ♦, A of ♠</pre>
=={{Header|Clojure}}==
<lang Clojure>(defrecord Card [pip suit]
(def suits [:club :diamond :heart :spade])
Object
(def pips [:ace 2 3 4 5 6 7 8 9 10 :jack :queen :king])
(toString [this] (str pip " of " suit)))
 
(defn deck [] (for [s suits p pips] [s p]))
(defprotocol pDeck
(deal [this n])
(shuffle [this])
(newDeck [this])
(print [this]))
 
(def shuffle clojure.core/shuffle)
(deftype Deck [cards]
(def deal first)
pDeck
(defn new-deckoutput [deck]
(deal [this n] [(take n cards) (Deck. (drop n cards))])
(doseq [[suit pip] deck]
(shuffle [this] (Deck. (shuffle cards)))
(println (format "%s of %ss"
(newDeck [this] (Deck. (for [suit ["Clubs" "Hearts" "Spades" "Diamonds"]
(if (keyword? pip) (name pip) pip)
pip ["2" "3" "4" "5" "6" "7" "8" "9" "10" "Jack" "Queen" "King" "Ace"]]
(Card. pip (name suit)))))
(print [this] (dorun (map (comp println str) cards)) this))
 
</lang>
(defn new-deck []
(.newDeck (Deck. nil)))</lang>
 
=={{Header|CoffeeScript}}==
Anonymous user