First class environments: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) m (→{{header|Sidef}}: Fix link: Perl 6 --> Raku) |
|||
Line 237: | Line 237: | ||
COUNTS: |
COUNTS: |
||
0 1 7 2 5 8 16 3 19 6 14 9 |
0 1 7 2 5 8 16 3 19 6 14 9 |
||
</pre> |
|||
=={{header|Clojure}}== |
|||
<lang Clojure> |
|||
(def hailstone-src |
|||
"(defn hailstone-step [env] |
|||
(let [{:keys[n cnt]} env] |
|||
(cond |
|||
(= n 1) {:n 1 :cnt cnt} |
|||
(even? n) {:n (/ n 2) :cnt (inc cnt)} |
|||
:else {:n (inc (* n 3)) :cnt (inc cnt)})))") |
|||
(defn create-hailstone-table [f-src] |
|||
(let [done? (fn [e] (= (:n e) 1)) |
|||
print-step (fn [envs] (println (map #(format "%4d" (:n %)) envs))) |
|||
print-counts (fn [envs] (println "Counts:\n" |
|||
(map #(format "%4d" (:cnt %)) envs)))] |
|||
(loop [f (eval (read-string f-src)) |
|||
envs (for [n (range 12)] |
|||
{:n (inc n) :cnt 0})] |
|||
(if (every? done? envs) |
|||
(print-counts envs) |
|||
(do |
|||
(print-step envs) |
|||
(recur f (map f envs))))))) |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
( 1 2 3 4 5 6 7 8 9 10 11 12) |
|||
( 1 1 10 2 16 3 22 4 28 5 34 6) |
|||
( 1 1 5 1 8 10 11 2 14 16 17 3) |
|||
( 1 1 16 1 4 5 34 1 7 8 52 10) |
|||
( 1 1 8 1 2 16 17 1 22 4 26 5) |
|||
( 1 1 4 1 1 8 52 1 11 2 13 16) |
|||
( 1 1 2 1 1 4 26 1 34 1 40 8) |
|||
( 1 1 1 1 1 2 13 1 17 1 20 4) |
|||
( 1 1 1 1 1 1 40 1 52 1 10 2) |
|||
( 1 1 1 1 1 1 20 1 26 1 5 1) |
|||
( 1 1 1 1 1 1 10 1 13 1 16 1) |
|||
( 1 1 1 1 1 1 5 1 40 1 8 1) |
|||
( 1 1 1 1 1 1 16 1 20 1 4 1) |
|||
( 1 1 1 1 1 1 8 1 10 1 2 1) |
|||
( 1 1 1 1 1 1 4 1 5 1 1 1) |
|||
( 1 1 1 1 1 1 2 1 16 1 1 1) |
|||
( 1 1 1 1 1 1 1 1 8 1 1 1) |
|||
( 1 1 1 1 1 1 1 1 4 1 1 1) |
|||
( 1 1 1 1 1 1 1 1 2 1 1 1) |
|||
Counts: |
|||
( 0 1 7 2 5 8 16 3 19 6 14 9) |
|||
</pre> |
</pre> |
||