Rule 30

Rule 30 in ClojureScript to demonstrate clojure-mode.

  • 🔪 Structural editing:

    • Barfing 🤮 & Slurping 🥤

      • Forward +/

      • Backward ++/

    • 💗 Grow/shrink selection +/

    • ✂️ Unwrap +s

  • 🧙 form-wise evaluation

    • ☝️ eval-at-cursor +

    • 🎚 eval-top-level ++

    • 🧫 eval-cell +

(def rule
  {[1 1 1] 0
   [1 1 0] 0
   [1 0 1] 0
   [1 0 0] 1
   [0 1 1] 1
   [0 1 0] 1
   [0 0 1] 1
   [0 0 0] 0})
(->> (assoc (vec (repeat 33 0)) 16 1)
  (iterate #(mapv rule
              (partition 3 1 (repeat 0) (cons 0 %))))
  (take 17))
ClojureScript

🔮 Viewers

The following cell registers the custom viewers. This api is still alpha and subject to change.

(require '[nextjournal.viewer :as v])
(v/register-viewers!
  {:number :cell ;; use the cell viewer for numbers
   :cell #(v/view-as :hiccup
            [:div.inline-block {:class (if (zero? %)
                                         "bg-white border-solid border-2 border-black"
                                         "bg-black")
                                :style {:width 16 :height 16}}])
   :vector (fn [x options]
             (->> x
               (map (partial v/inspect options))
               (into [:div.flex.inline-flex])
               (v/view-as :hiccup)))
   :list (fn [x options]
           (->> x
             (map (partial v/inspect options))
             (into [:div.flex.flex-col])
             (v/view-as :hiccup)))})
ClojureScript
Runtimes (1)