Merge pull request #6 from FrizzBolt/03-lists

Add solutions to section 03-lists
This commit is contained in:
Josh Abrams 2016-02-27 13:35:03 -06:00
commit e58275edbd

View file

@ -1,42 +1,48 @@
; "Lists can be expressed by function or a quoted form" ; "Lists can be expressed by function or a quoted form"
(= '(__ __ __ __ __) (list 1 2 3 4 5)) (= '(1 2 3 4 5) (list 1 2 3 4 5))
; "They are Clojure seqs (sequences), so they allow access to the first" ; "They are Clojure seqs (sequences), so they allow access to the first"
(= __ (first '(1 2 3 4 5))) (= 1 (first '(1 2 3 4 5)))
; "As well as the rest" ; "As well as the rest"
(= __ (rest '(1 2 3 4 5))) (= 2 3 4 5 (rest '(1 2 3 4 5))) ;; J -
; "Count your blessings" ; "Count your blessings"
(= __ (count '(dracula dooku chocula))) (= 3 (count '(dracula dooku chocula)))
; "Before they are gone" ; "Before they are gone"
(= __ (count '())) (= 0 (count '()))
; "The rest, when nothing is left, is empty" ; "The rest, when nothing is left, is empty"
(= __ (rest '(100))) (= (rest '(100))) ;; J - returns nothing.
; "Construction by adding an element to the front is easy" ; "Construction by adding an element to the front is easy"
(= __ (cons :a '(:b :c :d :e))) (= :a :b :c :d :e (cons :a '(:b :c :d :e))) ;; J - cons add's the element on the left to the beginning
;; of the list on the right and returns a seq.
;;(EX: (cons [1 2] '(3 4 5)) => '([1 2] 3 4 5)
; "Conjoining an element to a list isn't hard either" ; "Conjoining an element to a list isn't hard either"
(= __ (conj '(:a :b :c :d) :e)) (= :a :b :c :d :e (conj '(:a :b :c :d) :e))
;; J - conj works like cons, but takes any number of arguments from
;; the right and adds them to the beginning of the list on the left
;; returning them in the structure of whatever the list on the left is defined
;; as originally. (EX: (conj [4 5 6] 1 2 3) => [1 2 3 4 5 6]
; "You can use a list like a stack to get the first element" ; "You can use a list like a stack to get the first element"
(= __ (peek '(:a :b :c :d :e))) (= :a (peek '(:a :b :c :d :e))) ;; J - returns the first element
; "Or the others" ; "Or the others"
(= __ (pop '(:a :b :c :d :e))) (= (:b) (pop '(:a :b :c :d :e))) ;; J - pops the first element and returns the others as a seq
; "But watch out if you try to pop nothing" ; "But watch out if you try to pop nothing"
(= __ (try (= (try ;; J - Catch raises an error similar to 'raise' in Ruby.
(pop '()) (pop '())
(catch IllegalStateException e (catch IllegalStateException e
"No dice!"))) "No dice!")))
; "The rest of nothing isn't so strict" ; "The rest of nothing isn't so strict"
(= __ (try (= () (try
(rest '()) (rest '())
(catch IllegalStateException e (catch IllegalStateException e
"No dice!"))) "No dice!")))