2015-09-13 05:28:39 +00:00
|
|
|
(ns koans.03-lists
|
2014-05-02 21:37:11 +00:00
|
|
|
(:require [koan-engine.core :refer :all]))
|
2014-01-26 00:04:22 +00:00
|
|
|
|
2010-02-20 15:30:24 +00:00
|
|
|
(meditations
|
|
|
|
|
"Lists can be expressed by function or a quoted form"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= '(1 2 3 4 5) (list 1 2 3 4 5))
|
2010-02-20 15:30:24 +00:00
|
|
|
|
|
|
|
|
"They are Clojure seqs (sequences), so they allow access to the first"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= 1 (first '(1 2 3 4 5)))
|
2010-02-20 15:30:24 +00:00
|
|
|
|
|
|
|
|
"As well as the rest"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= '(2 3 4 5)(rest '(1 2 3 4 5)))
|
2010-02-20 15:30:24 +00:00
|
|
|
|
2013-03-04 22:58:58 +00:00
|
|
|
"Count your blessings"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= 3 (count '(dracula dooku chocula)))
|
2013-03-04 22:58:58 +00:00
|
|
|
|
|
|
|
|
"Before they are gone"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= 0 (count '()))
|
2013-03-04 22:58:58 +00:00
|
|
|
|
|
|
|
|
"The rest, when nothing is left, is empty"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= () (rest '(100)))
|
2010-02-20 15:30:24 +00:00
|
|
|
|
2013-03-04 22:58:58 +00:00
|
|
|
"Construction by adding an element to the front is easy"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= '(:a :b :c :d :e) (cons :a '(:b :c :d :e)))
|
2010-02-20 15:30:24 +00:00
|
|
|
|
2013-03-04 22:58:58 +00:00
|
|
|
"Conjoining an element to a list isn't hard either"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= '(:e :a :b :c :d) (conj '(:a :b :c :d) :e))
|
2010-02-20 15:30:24 +00:00
|
|
|
|
|
|
|
|
"You can use a list like a stack to get the first element"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= :a (peek '(:a :b :c :d :e)))
|
2010-02-20 15:30:24 +00:00
|
|
|
|
|
|
|
|
"Or the others"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= '(:b :c :d :e)(pop '(:a :b :c :d :e)))
|
2010-02-20 15:30:24 +00:00
|
|
|
|
|
|
|
|
"But watch out if you try to pop nothing"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= "No dice!" (try
|
2010-02-20 15:30:24 +00:00
|
|
|
(pop '())
|
2013-03-04 22:58:58 +00:00
|
|
|
(catch IllegalStateException e
|
|
|
|
|
"No dice!")))
|
2010-02-20 15:30:24 +00:00
|
|
|
|
|
|
|
|
"The rest of nothing isn't so strict"
|
2021-05-25 17:12:34 +00:00
|
|
|
(= ()(try
|
2010-02-20 15:30:24 +00:00
|
|
|
(rest '())
|
2013-03-04 22:58:58 +00:00
|
|
|
(catch IllegalStateException e
|
|
|
|
|
"No dice!"))))
|