Clojure Koans 18 Quote Notebook

{: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"}}}
deps.edn
Extensible Data Notation
{:hello (clojure-version)}
0.1s
Clojure

Initial Thoughts

...

;; "Wrap a quote around a list to suppress evaluation"
(= (quote (1 2 3 4 5)) '(1 2 3 4 5))
;; skill 18001: wrap a list with the `quote` macro/function (?) instead of prefixing with the single quote
;; question 18002: Where is it beneficial to use `quote` instead of the shortcut single quote?*
;; skill 18002: Create a list data/literal (?) by using the single quote prefix
;; question 18003: What are the considerations (usefulness/benefits/pitfalls/tradeoffs) of/when quoting as well as what (and where) are examples of these?
Clojure
;; "There is a shortcut too!"
(= (quote (1 2 3 4 5)) '(1 2 3 4 5))
;; question 18004: Is the "shortcut" referring to the single quote, and if not, then what?
Clojure
;; "You can quote symbols as well as lists... without evaluation!"
(= 'age (let [age 9] (quote age)))
;; question 18005: Where/when is it useful/beneficial to quote non-lists?
;; question 18006: Since `age` is a local binding, what is `'age` outside of that local scope? An unbound binding?
Clojure
;; "You can use a literal list as a data collection without having Clojure try to call a function"
(= (cons 1 (quote (2 3))) (list 1 2 3) (cons 1 [2 3]))
;; question 18007: Is there a difference between a "literal list" and a "list literal"?
Clojure
;; "The quote affects all of its arguments, not just the top level"
(= (list 1 '(+ 2 3)) '(1 (+ 2 3)))
;; question 18008: Does the `list` function only affect the top level of its arguments?
;; question 18009: What is an unambiguous (more clear and specific) way of expressing "The single quote prefix macro (?) affects (?) all of its arguments." ?
Clojure
;; "Syntax-quote (`) acts similarly to the normal quote"
(= (list 1 2 3) `(1 2 3) '(1 2 3))
;; question 18010: How does the syntax-quote (`) differe from the "normal" quote?
;; question 18011: What are the primary use-cases for syntax quoting?
;; question 18012: What are the usefulness/benefits/pitfalls/tradeoffs of syntax-quoting as well as unquoting?
Clojure
;; "Unquote (~) within a syntax-quoted expression lets you mark specific expressions as requiring evaluation"
(= (list 1 5) `(1 ~(+ 2 3)) '(1 5))
;; skill 18003: Unquote within a syntax-quoted expression to mark specific expressions to be evaluated with the `~` unquote prefix (macro?)
Clojure

Closing Thoughts

...

Runtimes (1)