(ns example-two.core) (def suits [:hearts :spades :clubs :diamonds]) (def ranks [:2 :3 :4 :5 :6 :7 :8 :9 :10 :jack :queen :king :ace]) (def deck (vec (for [s suits, r ranks] [s r]))) (set! *warn-on-reflection* true) (defprotocol ImmutableRandomNumberGenerator (next-long [self]) (next-state [self])) (defrecord LaggedFibonacciGenerator [ ^long low-backref ^long high-backref ^long current-index ^longs state ] ImmutableRandomNumberGenerator (next-long ^long [self] (aget ^longs (:state self) (:current-index self))) (next-state ^LaggedFibonacciGenerator [self] (let [next-index (inc (:current-index self)) low-backref (:low-backref self) high-backref (:high-backref self) low-index (mod (- next-index low-backref) high-backref) high-index (mod (- next-index high-backref) high-backref) old-state (long-array (:state self)) low-value (aget old-state low-index) high-value (aget old-state high-index) new-state (aclone old-state)] (aset-long new-state next-index (unchecked-add ^long low-value ^long high-value)) (LaggedFibonacciGenerator. low-backref high-backref next-index new-state)))) (defn- make-rng ^LaggedFibonacciGenerator [] (let [seed-prng (java.security.SecureRandom.) init-state (long-array (repeatedly 55 #(.nextLong seed-prng)))] (LaggedFibonacciGenerator. 24 55 0 init-state))) (defn shuffle-deck "Creates a shuffled deck of cards" [] (loop [deck (transient deck), i (dec (count deck)), rng (make-rng)] (if (zero? i) (persistent! deck) (let [j (mod (next-long rng) i)] (recur (assoc! deck i (deck j) j (deck i)) (dec i) (next-state rng)))))) (let [shuffled (shuffle-deck)] (println (count shuffled)) (println shuffled))
Standard input is empty
Standard output is empty
Exception in thread "main" java.lang.UnsupportedOperationException: Can't type hint a primitive local, compiling:(/home/KpE6mT/prog.clj:33:39) at clojure.lang.Compiler.analyze(Compiler.java:6519) at clojure.lang.Compiler.analyze(Compiler.java:6461) at clojure.lang.Compiler$HostExpr$Parser.parse(Compiler.java:979) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6709) at clojure.lang.Compiler.analyze(Compiler.java:6500) at clojure.lang.Compiler.analyze(Compiler.java:6461) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6704) at clojure.lang.Compiler.analyze(Compiler.java:6500) at clojure.lang.Compiler.analyze(Compiler.java:6461) at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3767) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6711) at clojure.lang.Compiler.analyze(Compiler.java:6500) at clojure.lang.Compiler.analyze(Compiler.java:6461) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5837) at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6155) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6709) at clojure.lang.Compiler.analyze(Compiler.java:6500) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6697) at clojure.lang.Compiler.analyze(Compiler.java:6500) at clojure.lang.Compiler.analyze(Compiler.java:6461) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5837) at clojure.lang.Compiler$NewInstanceMethod.parse(Compiler.java:8073) at clojure.lang.Compiler$NewInstanceExpr.build(Compiler.java:7609) at clojure.lang.Compiler$NewInstanceExpr$DeftypeParser.parse(Compiler.java:7490) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6709) at clojure.lang.Compiler.analyze(Compiler.java:6500) at clojure.lang.Compiler.analyze(Compiler.java:6461) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5837) at clojure.lang.Compiler$LetExpr$Parser.parse(Compiler.java:6155) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6709) at clojure.lang.Compiler.analyze(Compiler.java:6500) at clojure.lang.Compiler.analyze(Compiler.java:6461) at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5837) at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5272) at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3901) at clojure.lang.Compiler.analyzeSeq(Compiler.java:6707) at clojure.lang.Compiler.analyze(Compiler.java:6500) at clojure.lang.Compiler.eval(Compiler.java:6765) at clojure.lang.Compiler.load(Compiler.java:7195) at clojure.lang.Compiler.loadFile(Compiler.java:7151) at clojure.main$load_script.invoke(main.clj:274) at clojure.main$script_opt.invoke(main.clj:336) at clojure.main$main.doInvoke(main.clj:420) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.lang.Var.invoke(Var.java:379) at clojure.lang.AFn.applyToHelper(AFn.java:154) at clojure.lang.Var.applyTo(Var.java:700) at clojure.main.main(main.java:37) Caused by: java.lang.UnsupportedOperationException: Can't type hint a primitive local at clojure.lang.Compiler$LocalBindingExpr.<init>(Compiler.java:5742) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6889) at clojure.lang.Compiler.analyze(Compiler.java:6482) ... 47 more