Od prazne liste do makroa
Nebojša Stričević
5. decembar 2013.
(defn- fib-iter [max n i j] (if (= n max) j (recur max (inc n) j (+ i j))))
malo ću vas lagati
> ()
()
> (+ 1 2)
3
> (- 12 4)
8
> (+ 1 2 3 4)
10
> (* (- 12 8) (+ 1 2))
12
> (* (- 12 8) (+ 1 2))
; (* 4 (+ 1 2))
; (* 4 3)
12
> (def a 3)
a
> (def b 4)
b
> (println a)
3
> (+ a b)
7
> (def add-2
(fn [n]
(+ n 2)))
add-2
> (add-2 4)
6
>(def more-than-5?
(fn [n]
(if (> n 5)
(println "Yes!")
(println "No...")))
more-than-5?
> (more-than-5? 2)
"No..."
> (def numbers (1 2 3 4 5))
Error! There is no function "1".
> (def numbers '(1 2 3 4 5))
numbers
> (def numbers '(1 2 3 4 5))
numbers
> (first numbers)
1
> (rest numbers)
(2 3 4 5)
> (cons 0 numbers)
(0 1 2 3 4 5)
> (def numbers '(1 2 3 4 5))
numbers
> (map add-2 numbers)
(3 4 5 6 7)
> (def code '(+ 1 2))
code
> (println code)
(+ 1 2)
> (eval code)
3
> (def code '(+ 1 2))
code
>(def new-code
(cons '- (rest code)))
new-code
> (println new-code)
(- 1 2)
> (eval new-code)
-1
eval "1 + 2"
(if (= 1 1)
(println "1 is indeed 1"))
(unless (= 1 1)
(println "1 is not 1"))
> (def unless
(function [condition code]
(if (not condition)
code)))
> (unless (= 1 1)
(println "1 is not 1"))
"1 is not 1"
(defmacro unless [condition code]
'(if (not ~condition)
~code))
> (unless (= 1 1)
(println "1 is not 1"))
> (if (not (= 1 1))
(println "1 is not 1"))
>
// 1996.
for (int i = 0; i < collection.size(); i++) {
SomeType var = collection.get(i);
...
}
// 2004.
for (SomeType var : collection) {
...
}
(defmacro foreach [[sym coll] & body]
`(loop [coll# ~coll]
(when-let [[~sym & xs#] (seq coll#)]
~@body
(recur xs#))))
>(foreach [i numbers]
(println i))
http://slid.es/strika/clojure