clojure-koans/src/koans/03_lists.clj

46 lines
1.1 KiB
Clojure
Raw Normal View History

(ns koans.03-lists
(:require [koan-engine.core :refer :all]))
2010-02-20 15:30:24 +00:00
(meditations
"Lists can be expressed by function or a quoted form"
2021-06-15 21:48:17 +00:00
(= '(__ __ __ __ __) (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-06-15 21:48:17 +00:00
(= __ (first '(1 2 3 4 5)))
2010-02-20 15:30:24 +00:00
"As well as the rest"
2021-06-15 21:48:17 +00:00
(= __ (rest '(1 2 3 4 5)))
2010-02-20 15:30:24 +00:00
"Count your blessings"
2021-06-15 21:48:17 +00:00
(= __ (count '(dracula dooku chocula)))
"Before they are gone"
2021-06-15 21:48:17 +00:00
(= __ (count '()))
"The rest, when nothing is left, is empty"
2021-06-15 21:48:17 +00:00
(= __ (rest '(100)))
2010-02-20 15:30:24 +00:00
"Construction by adding an element to the front is easy"
2021-06-15 21:48:17 +00:00
(= __ (cons :a '(:b :c :d :e)))
2010-02-20 15:30:24 +00:00
"Conjoining an element to a list isn't hard either"
2021-06-15 21:48:17 +00:00
(= __ (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-06-15 21:48:17 +00:00
(= __ (peek '(:a :b :c :d :e)))
2010-02-20 15:30:24 +00:00
"Or the others"
2021-06-15 21:48:17 +00:00
(= __ (pop '(:a :b :c :d :e)))
2010-02-20 15:30:24 +00:00
"But watch out if you try to pop nothing"
2021-06-15 21:48:17 +00:00
(= __ (try
2010-02-20 15:30:24 +00:00
(pop '())
(catch IllegalStateException e
"No dice!")))
2010-02-20 15:30:24 +00:00
"The rest of nothing isn't so strict"
2021-06-15 21:48:17 +00:00
(= __ (try
2010-02-20 15:30:24 +00:00
(rest '())
(catch IllegalStateException e
"No dice!"))))