Clojure Koans 1 Equality Notebook

Welcome to my first notebook highlighting the Clojure Koans :)

In this notebook, I'll break down, solve, and investigate the Clojure Koans to better understand Clojure. I hope the "micro-skills" that I find will be useful for Clojure learners.

Please follow along with me in my journey, attempt to answer the questions I pose, ask new questions I haven't thought of, or propose new "skills".

Your feedback is crucial to making these notebooks awesome!

Original Koans repo is here: https://github.com/functional-koans/clojure-koans/

Spoilers Alert!

I share my answers for each Koan exercise ("meditation") below. If you are new to Clojure and want to attempt these for yourself, I urge you to come back after you have spent a little time on them.

Format

For each exercise I include:

  • my answer to the Koan exercise

  • one or more relevant skills (numbered in the order I find them)

  • one or more questions (numbered in the order I think of them)

Note: For each notebook, I will prefix skills and questions w/ the notebook number times 1000, so that way there will be room for 999 skills and questions per section... Yep, that should be enough.

;; configurations (don't edit this block)
{:deps {org.clojure/clojure {:mvn/version "1.10.1"}
        ;; complient is used for autocompletion
        ;; add your libs here (and restart the runtime to pick up changes)
        compliment/compliment {:mvn/version "0.3.9"}}}
Extensible Data Notation
;; configurations test
{:hello (clojure-version)}
0.0s
;; "We shall contemplate truth by testing reality, via equality"
(= true true)
;; skill 1001: compare two things using the `=` equality function
;; question 1001: What are smallest individual pieces/parts/items in Clojure syntax called? (entities, things, symbols, tokens, etc..) For two examples, above there are `=` and `true`. [glossary vocabulary terminology]
;; skill 1011: evaluate Clojure code
0.0s
;; "To understand reality, we must compare our expectations against reality"
(= 2 (+ 1 1))
;; skill 1002: add/sum two numbers together using the `+` addition function
;; skill 1012: nest a form/expression inside of another
0.0s
;; "You can test equality of many things"
(= (+ 3 4) 7 (+ 2 5))
;; skill 1003: compare more than two items at once using the `=` equality function
0.0s
;;"Some things may appear different, but be the same"
(= true (= 2 2/1))
0.0s
;;"You cannot generally float to heavens of integers"
(= false (= 2 2.0))
;; description: Compare for strict equality an integer and decimal precision number of equal value in Clojure to get a result of `false`
;; question 1002: Are equal value float/decimal precision numbers and integers equivalent in ClojureScipt?
;; answer 1002a: Yes, float/decimal precision numbers and integers are equivalent in ClojureScript.
;; question 1003: What the "double equal sign" (==) function called in Clojure? [glossary vocabulary terminology]
;; skill 1004: Compare numerical equality irregardless of type using the `==` function
0.0s
;; "But a looser equality is also possible"
(= true (== 2.0 2))
;; question 1004: What are typical use-cases for loose equality?
0.0s
;;"Something is not equal to nothing"
(= true (not (= 1 nil)))
;; skill 1005: Convert something is true to false and vice-versa using the `not` function
0.0s
;;"Strings, and keywords, and symbols: oh my!"
(= false (= "hello" :hello 'hello))
;; question 1005: What are the typical use cases for keywords?
;; question 1006: What are the typical use cases for symbols?
;; question 1007: What are the most generalized pieces of syntax in Clojure? Which of these are valid/accepted vocab; forms, tokens, expressions, symbols, entities, statements? What is their relationship hierarchy? [glossary vocabulary terminology] !!!
0.0s
;;"Make a keyword with your keyboard"
(= :hello (keyword "hello"))
;; skill 1006: Write/Create a keyword literal using the `:` colon prefix
;; question 1008: What is the `:` colon prefix called in Clojure? [glossary vocabulary terminology]
;; skill 1007: Create a keyword from a string using the `keyword` function
0.0s
;;"Symbolism is all around us"
(= 'hello (symbol "hello"))
;; skill 1008: Write/Create a symbol literal using the `'` single quote prefix
;; question 1009: What is the (') single quote prefix called in Clojure? [glossary vocabulary terminology]
;; skill 1009: Create a symbol from a string using the `symbol` function
0.0s
;;"What could be equivalent to nothing?"
(= nil nil)
;; question 1010: What exactly is `nil` in Clojure? (is it a type?, is it a symbol?, what category of "things" does it belong to?, etc.) [glossary vocabulary terminology]
0.0s
;;"When things cannot be equal, they must be different"
(not= :fill-in-the-blank :blah)
;; skill 1010: Compare for inequality using the `not=` function 
0.0s

Update (2021_05_02):

I'm experimenting with creating a hybrid tree of skills, questions, and facts.

To-Do:

  • [ ] Create a hierarchy of nodes where each node can have one or more prerequisite nodes, and there are three types of nodes: skills, questions, and facts, where facts can be answers to questions or simply just statements (all facts come with examples & sources to back them up)

Runtimes (1)