Clojure & Functional Programming? - LispCastlispcast.com/wp-content/uploads/2018/10/Clojure... ·...

12
Clojure & Functional Programming? Eric Normand

Transcript of Clojure & Functional Programming? - LispCastlispcast.com/wp-content/uploads/2018/10/Clojure... ·...

Clojure &Functional Programming?

Eric Normand

Outline

Eric Normand FunctionalProgramming

Clojure Clojure SYNC

Eric Normand

• UNO Alumnus (Bachelor’s and Masters)

• Functional programming (Lisp) since

2001

• Got into Clojure in 2008

• Professional FP 2010-present

• Teaches Functional Programming and

Clojure

@ericnormand - lispcast.com

Who am I?

Three DomainsFunctional Programming

Functional Programming is a programming paradigm that views solutions to problems in terms of three domains. All objects in

the solution fall into one of these three domains.

Actions are the broadest domain. It is

composed of anything that depends

on when it is run or how many times

it is run.

ActionsCalculations are the domain of

mathematical computation and

other “pure” calculations. They

depend on execution to be

understood.

CalculationsData is the domain of inert values.

They depend on interpretation to be

understood.

Data

Actions1

the process of doing something, typically to achieve an aim

• Send an email

• Launch a missile

• Modify or read global mutable state

• Read from disk

• Send a web request

Examples

Depend on when they are run or how many times they are run. They change

the world.

Criterion

Concurrency guarantees

• Idenpotence

• Transactional properties

• Freedom from side-effects

• Exactly-once reads

Discipline

Calculations2

computation from inputs to outputs

• Summing numbers

• Statistical calculations

• Transforming from one format to another

Examples

Depend on being run to know what they do. They are opaque.Criterion

Pure functions

• Rely only on arguments

• Return a value

• No side-effects

Discipline

Data3

factual information used as a basis for reasoning, discussion, or calculation

• Numbers

• Lists

• Dictionaries

• Tables

• Strings

Examples

Depend on interpretation. They are inert. Criterion

Immutability

• Copy-on-write

• Persistent data structures

• Append-only data stores

Discipline

Functional Programming

Clojure

Clojure is a Lisp

Lisp is a family of

programming

languages invented

in 1958 by John

McCarthy.

Written by Rich Hickey

First released in

2007.

Designed to be hosted

Clojure is designed

to be hosted on the

JVM. It now also

compiles to

JavaScript.

Data-Orientation

Concurrency

Atoms

Queues

Communicating Sequential

Processes

Concurrency PrimitivesActions

Functional Programming Clojure

Data transformation

Pipelining

Higher-order functions

Rich core libraryCalculations

Functional Programming Clojure

Atomic values

Collections

Immutable DataData

Functional Programming Clojure

123{}[]

“abc”