SlideShare uma empresa Scribd logo
1 de 77
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”

Mais conteúdo relacionado

Mais procurados

Mais procurados (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
 

Destaque

Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)
Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)
Bibliothcairesdufuturetfuturdesbibliothques 140617024643-phpapp02 (1)
William Jouve
 

Destaque (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
 

Semelhante a Into Clojure

Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - Stockholm
Jan Kronquist
 
Thinking Functionally In Ruby
Thinking Functionally In RubyThinking Functionally In Ruby
Thinking Functionally In Ruby
Ross Lawley
 
Java script objects 1
Java script objects 1Java script objects 1
Java script objects 1
H K
 
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
 
Underscore.js
Underscore.jsUnderscore.js
Underscore.js
timourian
 

Semelhante a 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
 

Último

Último (20)

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

Into Clojure

Notas do Editor

  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