SlideShare a Scribd company logo
11.10.2011
Agenda
•   Intro til Clojure
    - Alf Kristian Støyle
•   Inkrementell utvikling med Clojure, Emacs og SLIME
    - Stig Henriksen
•   Clojure STM
    - Ole Christian Rynning
•   Eratosthenes' sil: et eventyr om optimalisering
    - Bodil Stokke
Clojure
• General purpose
• Lisp (List Processing)
• Funksjonelt
• Kompilert
• Dynamisk typet
Literaler
"String"     ;=>       String
Literaler
       "String"
(class "String")   ;=> java.lang.String
                                 String
Literaler
(class   "String"
         "String")     ;=>             String
                             java.lang.String
(class   #"regex")     ;=>   java.util.regex.Pattern
(class   123)          ;=>   java.lang.Integer
(class   2147483648)   ;=>   java.lang.Long
(class   123M)         ;=>   java.math.BigDecimal
(class   123N)         ;=>   clojure.lang.BigInt
(class   true)         ;=>   java.lang.Boolean
(class   false)        ;=>   java.lang.Boolean
(class   42/43)        ;=>   clojure.lang.Ratio
(class   c)           ;=>   java.lang.Character
(class   'foo)         ;=>   clojure.lang.Symbol
(class   :bar)         ;=>   clojure.lang.Keyword
(class   nil)          ;=>   nil
Collection literaler
; List
'(3 2 1)

; Vector
[1 2 3]

; Set
#{1 2 3}

; Map
{1 "one", 2 "two"‚ 3 "three"}
Collection literaler
; List
'(3 2 1) -> (list 3 2 1)

; Vector
[1 2 3] -> (vector 1 2 3)

; Set
#{1 2 3} -> (hash-set 1 2 3)

; Map
{1 "one", 2 "two"‚ 3 "three"} ->
      (hash-map 1 "one", 2 "two", 3 "three")
Dette er en liste



'(+ 1 2)
Dette er en liste



'(+ 1 2)
 ;=> (+ 1 2)
Dette er en form



(+ 1 2)
Dette er en form



(+ 1 2)
;=> 3
Dette er en form



(+ 1 2)
;=> 3
Dette er en form



(+ 1 2)
;=> 3
Dette er en form



(+ 1 2)
;=> 3
Prefiks notasjon



(+ 1 2)
;=> 3
Dette er en form



(apply + '(1 2))
      ;=> 3
Dette er en form



(apply + '(1 2))
      ;=> 3
Dette er en form



(apply + '(1 2))
      ;=> 3
Dette er en java.lang.String



                      "(+ 1 2)"
 ;=> "(+ 1 2)"
Dette er en java.lang.String
som kan konverteres til en form


(read-string "(+ 1 2)")
     ;=> (+ 1 2)
Dette er en java.lang.String
      som kan konverteres til en form
            som kan evalueres

(eval (read-string "(+ 1 2)"))
                 ;=> 3
Read-compile-evaluate
1. Tekst konverteres til forms
2. Forms blir konvertert til bytekode av
   compiler
3. Bytekode evalueres
Funksjoner


(fn [n] (* 2 n))
Funksjoner


             (fn [n] (* 2 n))
;=> #<core$eval376$fn__377 user$eval376$fn__377@5c76458f>
Funksjoner


((fn [n] (* 2 n)) 4)
Funksjoner


((fn [n] (* 2 n)) 4)
      ;=> 8
Funksjoner


(fn [n] (* 2 n))
#(* 2 %)
Funksjoner


(fn [n] (* 2 n))
#(* 2 %)
#(* 2 %1)
Funksjoner & Vars

(def times-two
  (fn [n] (* 2 n)))
;=> #'user/times-two
Funksjoner & Vars

(def times-two
  (fn [n] (* 2 n)))
;=> #'user/times-two
(times-two 4)
;=> 8
Funksjoner & Vars

(def times-two
  (fn [n] (* 2 n)))

(defn times-two
  [n] (* 2 n))
Immutable og persistente
    datastrukturer
(def my-list '(3 2 1))
; => (3 2 1)
Immutable og persistente
    datastrukturer
(def my-list '(3 2 1))
; => (3 2 1)
Immutable og persistente
    datastrukturer
(def my-list '(3 2 1))
; => (3 2 1)

(def my-other-list (cons 4 my-list))
; => (4 3 2 1)
Immutable og persistente
    datastrukturer
(def my-list '(3 2 1))
; => (3 2 1)

(def my-other-list (cons 4 my-list))
; => (4 3 2 1)
Immutable collections
; List
'(3 2 1)

; Vector
[1 2 3]

; Set
#{1 2 3}

; Map
{1 "one", 2 "two"‚ 3 "three"}
first
(first '(1 2 3))



(first [1 2 3])



(first #{1 2 3})



(first {:one "one" :two   "two"})
first
(first '(1 2 3))
;=> 1

(first [1 2 3])
;=> 1

(first #{1 2 3})
;=> 1

(first {:one "one" :two   "two"})
first
(first '(1 2 3))
;=> 1

(first [1 2 3])
;=> 1

(first #{1 2 3})
;=> 1

(first {:one "one" :two   "two"})
;=> [:one "one"]
rest
(rest '(1 2 3))



(rest [1 2 3])



(rest #{1 2 3})



(rest {:one "one" :two   "two"})
rest
(rest '(1 2 3))
;=> (2 3)

(rest [1 2 3])
;=> (2 3)

(rest #{1 2 3})
;=> (2 3)

(rest {:one "one" :two   "two"})
rest
(rest '(1 2 3))
;=> (2 3)

(rest [1 2 3])
;=> (2 3)

(rest #{1 2 3})
;=> (2 3)

(rest {:one "one" :two   "two"})
;=> ([:two "two"])
rest
(rest '())



(rest [])



(rest #{})



(rest {})
rest
(rest '())
;=> ()

(rest [])
;=> ()

(rest #{})
;=> ()

(rest {})
;=> ()
get
(get '(1 2 3) 0)



(get [1 2 3] 0)



(get #{3 2 1} 1)



(get {:one 1 :two 2 :three 3} :one)
get
(get '(1 2 3) 0)



(get [1 2 3] 0)
;=> 1

(get #{3 2 1} 1)



(get {:one 1 :two 2 :three 3} :one)
get
(get '(1 2 3) 0)



(get [1 2 3] 0)
;=> 1

(get #{3 2 1} 1)
;=> 1

(get {:one 1 :two 2 :three 3} :one)
get
(get '(1 2 3) 0)



(get [1 2 3] 0)
;=> 1

(get #{3 2 1} 1)
;=> 1

(get {:one 1 :two 2 :three 3} :one)
;=> 1
get
(get '(1 2 3) 0)
;=> nil

(get [1 2 3] 0)
;=> 1

(get #{3 2 1} 1)
;=> 1

(get {:one 1 :two 2 :three 3} :one)
;=> 1
get
(get '(1 2 3) 0 "yay")
;=> yay

(get [1 2 3] -1 "yay")
;=> yay

(get #{3 2 1} 0 "yay")
;=> yay

(get {:one 1 :two 2 :three 3} :zero "yay")
;=> yay
collections er
('(1 2 3) 0)
                funksjoner

([1 2 3] 0)



(#{3 2 1} 1)



({:one 1 :two 2 :three 3} :one)
collections er
('(1 2 3) 0)
                funksjoner

([1 2 3] 0)
;=> 1

(#{3 2 1} 1)
;=> 1

({:one 1 :two 2 :three 3} :one)
;=> 1
noen collections er
          funksjoner
('(1 2 3) 0)
;=> java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IFn




([1 2 3] 0)
;=> 1

(#{3 2 1} 1)
;=> 1

({:one 1 :two 2 :three 3} :one)
;=> 1
contains?
(contains? '(10 11 12) 10)



(contains? '[10 11 12] 1)



(contains? #{3 2 1} 1)



(contains? {:one 1 :two 2 :three 3} :one)
contains?
(contains? '(10 11 12) 10)



(contains? '[10 11 12] 1)



(contains? #{3 2 1} 1)
;=> true

(contains? {:one 1 :two 2 :three 3} :one)
contains?
(contains? '(10 11 12) 10)



(contains? '[10 11 12] 1)



(contains? #{3 2 1} 1)
;=> true

(contains? {:one 1 :two 2 :three 3} :one)
;=> true
contains?
(contains? '(10 11 12) 10)
;=> false

(contains? '[10 11 12] 1)



(contains? #{3 2 1} 1)
;=> true

(contains? {:one 1 :two 2 :three 3} :one)
;=> true
contains?
(contains? '(10 11 12) 10)
;=> false

(contains? '[10 11 12] 1)
;=> true

(contains? #{3 2 1} 1)
;=> true

(contains? {:one 1 :two 2 :three 3} :one)
;=> true
.contains
(.contains '(10 11 12) 10)



(.contains '[10 11 12] 1)



(.contains #{3 2 1} 1)



(.contains {:one 1 :two 2 :three 3} :one)
.contains
(.contains '(10 11 12) 10)
;=> true

(.contains '[10 11 12] 1)
;=> false

(.contains #{3 2 1} 1)
;=> true

(.contains {:one 1 :two 2 :three 3} :one)
.contains
(.contains '(10 11 12) 10)
;=> true

(.contains '[10 11 12] 1)
;=> false

(.contains #{3 2 1} 1)
;=> true

(.contains {:one 1 :two 2 :three 3} :one)
;=> java.lang.IllegalArgumentException: No matching method
found: contains for class clojure.lang.PersistentArrayMap
.contains
(.contains '(10 11 12) 10)
;=> true

(.contains '[10 11 12] 1)
;=> false

(.contains #{3 2 1} 1)
;=> true

(.containsKey {:one 1 :two 2 :three 3} :one)
;=> true
Java interop

(new java.util.ArrayList)
;=> #<ArrayList []>
Java interop

(new java.util.ArrayList)
;=> #<ArrayList []>

(java.util.ArrayList.)
;=> #<ArrayList []>
Java interop
(System/currentTimeMillis)
;=> 1318164613423

(.size (new java.util.ArrayList))
;=> 0

(. (new java.util.ArrayList) size)
;=> 0
Makroer
(infix (1 + 2))
;=> 3
Makroer
(infix (1 + 2))
;=> 3


(defmacro infix [form]
  (list (second form) (first form) (first (nnext form))))
;=> #'user/infix
Read-compile-evaluate
1. Tekst konverteres til forms
2. Forms blir konvertert til bytekode av
   compiler
3. Dersom compiler finner en makro,
   ekspander makro og begynn på 1.
4. Bytekode evalueres
Makroer
(infix (1 + 2))
;=> 3


(defmacro infix [form]
  (list (second form) (first form) (first (nnext form))))
;=> #'user/infix
Makroer
(infix (1 + 2))
;=> 3


(defmacro infix [form]
  (list (second form) (first form) (first (nnext form))))
;=> #'user/infix


(macroexpand '(infix (1 + 2)))
;=> (+ 1 2)
Makroer


(defmacro infix [form]
  (list (second form) (first form) (first (nnext form))))
;=> #'user/infix


(defmacro infix [form]
  `(~(second form) ~(first form) ~@(nnext form)))
;=> #'user/infix
Makroer
• The two rules of the macro club




         Programming Clojure - Stuart Halloway 2009
Makroer
• The two rules of the macro club
  1. Don’t write macros.




         Programming Clojure - Stuart Halloway 2009
Makroer
• The two rules of the macro club
  1. Don’t write macros.
  2. Only write macros if that is the only way to
     encapsulate a pattern.




         Programming Clojure - Stuart Halloway 2009
Makroer
• The two rules of the macro club
  1. Don’t write macros.
  2. Only write macros if that is the only way to
     encapsulate a pattern.
  3. You can write any macro that makes life
     easier for your callers when compared
     with an equivalent function.

         Programming Clojure - Stuart Halloway 2009
REPL demo
“late collections/funksjoner”

More Related Content

What's hot

Benefits of Kotlin
Benefits of KotlinBenefits of Kotlin
Benefits of Kotlin
Benjamin Waye
 
Privet Kotlin (Windy City DevFest)
Privet Kotlin (Windy City DevFest)Privet Kotlin (Windy City DevFest)
Privet Kotlin (Windy City DevFest)
Cody Engel
 
Why Learn Python?
Why Learn Python?Why Learn Python?
Why Learn Python?
Christine Cheung
 
QA Auotmation Java programs,theory
QA Auotmation Java programs,theory QA Auotmation Java programs,theory
QA Auotmation Java programs,theory
archana singh
 
The Ring programming language version 1.7 book - Part 35 of 196
The Ring programming language version 1.7 book - Part 35 of 196The Ring programming language version 1.7 book - Part 35 of 196
The Ring programming language version 1.7 book - Part 35 of 196
Mahmoud Samir Fayed
 
Scala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 WorldScala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 World
BTI360
 
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev FedorProgramming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Fedor Lavrentyev
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
Jonas Bonér
 
Macrobrew: Clojure macros distilled
Macrobrew: Clojure macros distilledMacrobrew: Clojure macros distilled
Macrobrew: Clojure macros distilled
abhinavomprakash10
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to Python
UC San Diego
 
Programmation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScriptProgrammation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScript
Loïc Knuchel
 
Kotlin collections
Kotlin collectionsKotlin collections
Kotlin collections
Myeongin Woo
 
JavaScript Fundamentals with Angular and Lodash
JavaScript Fundamentals with Angular and LodashJavaScript Fundamentals with Angular and Lodash
JavaScript Fundamentals with Angular and Lodash
Bret Little
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Fabio Collini
 
Sneaking inside Kotlin features
Sneaking inside Kotlin featuresSneaking inside Kotlin features
Sneaking inside Kotlin features
Chandra Sekhar Nayak
 
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night TurinAsync code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Fabio Collini
 
Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kirill Rozov
 
Madrid gug - sacando partido a las transformaciones ast de groovy
Madrid gug - sacando partido a las transformaciones ast de groovyMadrid gug - sacando partido a las transformaciones ast de groovy
Madrid gug - sacando partido a las transformaciones ast de groovy
Iván López Martín
 
Lodash js
Lodash jsLodash js
Lodash js
LearningTech
 

What's hot (20)

Benefits of Kotlin
Benefits of KotlinBenefits of Kotlin
Benefits of Kotlin
 
Privet Kotlin (Windy City DevFest)
Privet Kotlin (Windy City DevFest)Privet Kotlin (Windy City DevFest)
Privet Kotlin (Windy City DevFest)
 
Why Learn Python?
Why Learn Python?Why Learn Python?
Why Learn Python?
 
QA Auotmation Java programs,theory
QA Auotmation Java programs,theory QA Auotmation Java programs,theory
QA Auotmation Java programs,theory
 
The Ring programming language version 1.7 book - Part 35 of 196
The Ring programming language version 1.7 book - Part 35 of 196The Ring programming language version 1.7 book - Part 35 of 196
The Ring programming language version 1.7 book - Part 35 of 196
 
Scala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 WorldScala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 World
 
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev FedorProgramming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
Macrobrew: Clojure macros distilled
Macrobrew: Clojure macros distilledMacrobrew: Clojure macros distilled
Macrobrew: Clojure macros distilled
 
Google Guava
Google GuavaGoogle Guava
Google Guava
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to Python
 
Programmation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScriptProgrammation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScript
 
Kotlin collections
Kotlin collectionsKotlin collections
Kotlin collections
 
JavaScript Fundamentals with Angular and Lodash
JavaScript Fundamentals with Angular and LodashJavaScript Fundamentals with Angular and Lodash
JavaScript Fundamentals with Angular and Lodash
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
 
Sneaking inside Kotlin features
Sneaking inside Kotlin featuresSneaking inside Kotlin features
Sneaking inside Kotlin features
 
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night TurinAsync code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
 
Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3Kotlin Advanced - Apalon Kotlin Sprint Part 3
Kotlin Advanced - Apalon Kotlin Sprint Part 3
 
Madrid gug - sacando partido a las transformaciones ast de groovy
Madrid gug - sacando partido a las transformaciones ast de groovyMadrid gug - sacando partido a las transformaciones ast de groovy
Madrid gug - sacando partido a las transformaciones ast de groovy
 
Lodash js
Lodash jsLodash js
Lodash js
 

Viewers also liked

Clojure - JVM språket som er "multi-core ready"
Clojure - JVM språket som er "multi-core ready"Clojure - JVM språket som er "multi-core ready"
Clojure - JVM språket som er "multi-core ready"
Alf Kristian Støyle
 
Logi
LogiLogi
Clojure workshop
Clojure workshopClojure workshop
Clojure workshop
Alf Kristian Støyle
 
Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)
Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)
Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)William Jouve
 
Learning Lisp
Learning LispLearning Lisp
Learning Lisp
Alf Kristian Støyle
 
Distributed Computing - Cloud Computing and Other Buzzwords: Implications for...
Distributed Computing - Cloud Computing and Other Buzzwords: Implications for...Distributed Computing - Cloud Computing and Other Buzzwords: Implications for...
Distributed Computing - Cloud Computing and Other Buzzwords: Implications for...
Mark Conrad
 
The account problem in Java and Clojure
The account problem in Java and ClojureThe account problem in Java and Clojure
The account problem in Java and Clojure
Alf Kristian Støyle
 
Scala 3camp 2011
Scala   3camp 2011Scala   3camp 2011
Scala 3camp 2011
Scalac
 
Scala == Effective Java
Scala == Effective JavaScala == Effective Java
Scala == Effective Java
Scalac
 

Viewers also liked (11)

Clojure - JVM språket som er "multi-core ready"
Clojure - JVM språket som er "multi-core ready"Clojure - JVM språket som er "multi-core ready"
Clojure - JVM språket som er "multi-core ready"
 
Likwidacja linii tramwaju szybkiego w Zielonej Górze
Likwidacja linii tramwaju szybkiego w Zielonej GórzeLikwidacja linii tramwaju szybkiego w Zielonej Górze
Likwidacja linii tramwaju szybkiego w Zielonej Górze
 
Logi
LogiLogi
Logi
 
Clojure workshop
Clojure workshopClojure workshop
Clojure workshop
 
Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)
Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)
Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)
 
Learning Lisp
Learning LispLearning Lisp
Learning Lisp
 
Distributed Computing - Cloud Computing and Other Buzzwords: Implications for...
Distributed Computing - Cloud Computing and Other Buzzwords: Implications for...Distributed Computing - Cloud Computing and Other Buzzwords: Implications for...
Distributed Computing - Cloud Computing and Other Buzzwords: Implications for...
 
Paralell collections in Scala
Paralell collections in ScalaParalell collections in Scala
Paralell collections in Scala
 
The account problem in Java and Clojure
The account problem in Java and ClojureThe account problem in Java and Clojure
The account problem in Java and Clojure
 
Scala 3camp 2011
Scala   3camp 2011Scala   3camp 2011
Scala 3camp 2011
 
Scala == Effective Java
Scala == Effective JavaScala == Effective Java
Scala == Effective Java
 

Similar to Into Clojure

[1062BPY12001] Data analysis with R / week 2
[1062BPY12001] Data analysis with R / week 2[1062BPY12001] Data analysis with R / week 2
[1062BPY12001] Data analysis with R / week 2
Kevin Chun-Hsien Hsu
 
R programming
R programmingR programming
R programming
Pramodkumar Jha
 
Enter The Matrix
Enter The MatrixEnter The Matrix
Enter The Matrix
Mike Anderson
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Science
Mike Anderson
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Intro
thnetos
 
Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - StockholmJan Kronquist
 
Arrays and function basic c programming notes
Arrays and function basic c programming notesArrays and function basic c programming notes
Arrays and function basic c programming notes
GOKULKANNANMMECLECTC
 
Basic operations by novi reandy sasmita
Basic operations by novi reandy sasmitaBasic operations by novi reandy sasmita
Basic operations by novi reandy sasmita
beasiswa
 
RNN, LSTM and Seq-2-Seq Models
RNN, LSTM and Seq-2-Seq ModelsRNN, LSTM and Seq-2-Seq Models
RNN, LSTM and Seq-2-Seq Models
Emory NLP
 
Python-Tuples
Python-TuplesPython-Tuples
Python-Tuples
Krishna Nanda
 
Thinking Functionally In Ruby
Thinking Functionally In RubyThinking Functionally In Ruby
Thinking Functionally In RubyRoss Lawley
 
Java script objects 1
Java script objects 1Java script objects 1
Java script objects 1H K
 
Clojure basics
Clojure basicsClojure basics
Clojure basics
Knoldus Inc.
 
Brief intro to clojure
Brief intro to clojureBrief intro to clojure
Brief intro to clojure
Roy Rutto
 
Advanced data structure
Advanced data structureAdvanced data structure
Advanced data structure
Shakil Ahmed
 
Problem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdfProblem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdf
ebrahimbadushata00
 
Coscup2021-rust-toturial
Coscup2021-rust-toturialCoscup2021-rust-toturial
Coscup2021-rust-toturial
Wayne Tsai
 
Underscore.js
Underscore.jsUnderscore.js
Underscore.jstimourian
 
8558537werr.pptx
8558537werr.pptx8558537werr.pptx
8558537werr.pptx
ssuser8a9aac
 

Similar to Into Clojure (20)

[1062BPY12001] Data analysis with R / week 2
[1062BPY12001] Data analysis with R / week 2[1062BPY12001] Data analysis with R / week 2
[1062BPY12001] Data analysis with R / week 2
 
R programming
R programmingR programming
R programming
 
Python lecture 05
Python lecture 05Python lecture 05
Python lecture 05
 
Enter The Matrix
Enter The MatrixEnter The Matrix
Enter The Matrix
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Science
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Intro
 
Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - Stockholm
 
Arrays and function basic c programming notes
Arrays and function basic c programming notesArrays and function basic c programming notes
Arrays and function basic c programming notes
 
Basic operations by novi reandy sasmita
Basic operations by novi reandy sasmitaBasic operations by novi reandy sasmita
Basic operations by novi reandy sasmita
 
RNN, LSTM and Seq-2-Seq Models
RNN, LSTM and Seq-2-Seq ModelsRNN, LSTM and Seq-2-Seq Models
RNN, LSTM and Seq-2-Seq Models
 
Python-Tuples
Python-TuplesPython-Tuples
Python-Tuples
 
Thinking Functionally In Ruby
Thinking Functionally In RubyThinking Functionally In Ruby
Thinking Functionally In Ruby
 
Java script objects 1
Java script objects 1Java script objects 1
Java script objects 1
 
Clojure basics
Clojure basicsClojure basics
Clojure basics
 
Brief intro to clojure
Brief intro to clojureBrief intro to clojure
Brief intro to clojure
 
Advanced data structure
Advanced data structureAdvanced data structure
Advanced data structure
 
Problem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdfProblem 1 Show the comparison of runtime of linear search and binar.pdf
Problem 1 Show the comparison of runtime of linear search and binar.pdf
 
Coscup2021-rust-toturial
Coscup2021-rust-toturialCoscup2021-rust-toturial
Coscup2021-rust-toturial
 
Underscore.js
Underscore.jsUnderscore.js
Underscore.js
 
8558537werr.pptx
8558537werr.pptx8558537werr.pptx
8558537werr.pptx
 

Recently uploaded

FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
Vlad Stirbu
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..
UiPathCommunity
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
UiPathCommunity
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 

Recently uploaded (20)

FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 

Into Clojure

Editor's Notes

  1. * Sponsing\n* Andre m&amp;#xF8;te\n
  2. \n
  3. F&amp;#xF8;rst lisp i 1958 John McCarthy\nIkke objektorientert\nYtelse nesten som Java\n
  4. \n
  5. \n
  6. \n
  7. \n
  8. #### N&amp;#xE5; har dere sett all syntaksen ####\n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. #### Skog av funksjoner som kan operere p&amp;#xE5; disse datastrukturene ####\nLa oss se p&amp;#xE5; noen som er litt spesielle.\n
  41. #### Skog av funksjoner som kan operere p&amp;#xE5; disse datastrukturene ####\nLa oss se p&amp;#xE5; noen som er litt spesielle.\n
  42. #### Skog av funksjoner som kan operere p&amp;#xE5; disse datastrukturene ####\nLa oss se p&amp;#xE5; noen som er litt spesielle.\n
  43. #### Skog av funksjoner som kan operere p&amp;#xE5; disse datastrukturene ####\nLa oss se p&amp;#xE5; noen som er litt spesielle.\n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n