Here are some sample code:
(deftype Deck52 [suits] :as this DeckOfCards (check-empty [] (Deck52. (apply hash-map (apply concat (remove (-> nil?) (for [[key val] suits] (if (empty? val) nil [key val]))))))) (remove-card [suit card] (assoc suits suit (remove #(= card %) (suit suits)))) (get-card [suit] (let [suitd (suit suits)] [(first suitd) (check-empty (Deck52. (assoc suits suit (rest suitd))))])) (random-card [] (let [suitn (+ 1 (rand-int 4))] (cond (= suitn 1) (get-card this :hearts) (= suitn 2) (get-card this :diamonds) (= suitn 3) (get-card this :clubs) (= suitn 4) (get-card this :spades)))))
I also posted this code in Gist here if it is easier to read: http://gist.github.com/307425 (nowhere to go).
The main example here is check-empty . I had great difficulty knowing where I should and should not have come back, and I still donβt know if I did it right. He threatens to walk right on the right side of the screen, but the clojure way is to indent, and I guess it should be like that.
So the question is, when did the time come to put a new line in Clojure / Lisp code? Am I doing this rite?
NOTE. I canβt promise that the code I posted works. I did some experiments, and some things can be empty if not broken.
coding-style newline clojure
Rayne
source share