The Curious Clojureist
|
|
- Brice James
- 5 years ago
- Views:
Transcription
1 The Curious Clojureist NEAL FORD director / software architect meme wrangler ThoughtWorks nford@thoughtworks.com 2002 Summit Boulevard, Atlanta, GA nealford.com thoughtworks.com
2 what is this talk about? clojure s 4 elevators: 1. java interop 2. lisp 3. functional 4. state & concurrency the ecosystem the coolness
3 what is clojure? Clojure is a dynamic, strongly typed, functional, highperformance implementation of a lisp on the JVM.
4 isn t lisp the one with all the () s? yes
5 why all the () s? Lisp is a homoiconic language. Lisp programs consist of lisp data structures. all kinds of useful!
6 ecosystem
7 clojure.org/
8 code.google.com/p/counterclockwise/
9 github.com/technomancy/emacs-starter-kit
10 github.com/technomancy/leiningen
11 compojure (web framework) clj-record (pseudo-port of ActiveRecord) github.com/weavejester/ compojure github.com/duelinmarkers/ clj-record clojureql (relational algebra -> SQL) clojurescript (clojure on JavaScript) github.com/laujensen/ clojureql github.com/clojure/ clojurescript
12 what does clojure code look like?
13 data types? type example java equivalent string "foo" String character \f Character regex #"fo*" Pattern a. p. integer 42 Int/Long/BigInteger double Double a.p. double M BigDecimal boolean true Boolean nil nil null symbol foo, + N/A keyword :foo, ::foo N/A
14 data literals? type properties example list vector map singly-linked, insert at front (1 2 3) indexed, insert at rear [1 2 3] key/value {:a 100 :b 90} set key #{:a :b}
15 function calls? semantics: fn call arg (println "Hello World") structure: symbol list string
16 function definition? define a fn fn name docstring arguments (defn greet "Returns a friendly greeting" [your-name] (str "Hello, " your-name)) fn body
17 homoiconicity? symbol symbol string vector (defn greet "Returns a friendly greeting" [your-name] (str "Hello, " your-name)) it s all data list
18 function meta-data? prefix with ^ class name or arbitrary map (defn ^String greet "Returns a friendly greeting" [your-name] (str "Hello, " your-name))
19 what is the java interop story with clojure?
20 interop? syntax extensions to reach all of Java compiles to bytecode fast call Clojure from Java
21 construction? new Widget("foo") (Widget. "red")
22 static members? Math.PI Math/PI
23 instance members? rnd.nextint() (.nextint rnd)
24 chained access? person.getaddress().getzipcode() (.. person getaddress getzipcode)
25 () count? 8 6
26 how would you implement an interface? interface (reify Runnable (run [] (println "Hello"))) method bodies add more interfaces here
27 what would a typical method look like in clojure? isblank()
28 isblank()
29 isblank() types
30 isblank() class
31 isblank() + higher-order function
32 isblank() corner cases
33 isblank() lispify!
34 when does verbosity == obscurity?
35 what s so special about lisp? feature industry norm cool kids clojure conditionals variables garbage collection recursion function type symbol type whole language available everything s an expression homoiconicity
36 what are special forms? the syntactic scaffolding of your language imports scopes protection meta-data control flow anything using a keyword
37 how are special forms outside lisp different? μ limited to specific use μ look different μ may have special semantics unavailable to you μ hamper reuse
38 what s special about lisp s special forms? λ look just like everything else λ may have special semantics available to you λ can be augmented with macros
39 all forms are created equal? form syntax example function list (println "hello") operator list (+ 1 2) method call list (.trim " hello ") import list (require 'mylib) metadata list (with-meta obj m) control flow list (when valid? (proceed)) scope list (dosync (alter...))
40 why is this important? special forms are easier to understand individually but create combinatorial complexity in aggregate to deal with complexity, you categorize & you end up
41 what s the alternative to patterns in lisp? m a c r o s
42 how can macros reduce repetition? (.add frame panel) (.pack frame) (.setvisible frame true) (doto frame (.add panel) (.pack) (.setvisible true) say it only once doto returns frame now we have an expression
43 Many of the features of Clojure are implemented with macros. How can you tell? you can t!
44 an example of a simple macro? (defmacro when [test & body] (list 'if test (cons 'do body))) (when x (println "x is true"))) macroexpansion it s all data (if x (do (println "x is true")))
45 what are some types of macros? type control flow vars java interop examples when when-not and or defn defmacro defmulti.. doto deftype proxy rearranging -> ->> -?> scopes special form dosync time with-open fn lazy-seq let
46 how does functional make my life better?
47 how does function change the structure of my code? indexofany
48 indexofany StringUtils.indexOfAny(null, *) = -1 StringUtils.indexOfAny("", *) = -1 StringUtils.indexOfAny(*, null) = -1 StringUtils.indexOfAny(*, []) = -1 StringUtils.indexOfAny("zzabyycdxx",['z','a']) = 0 StringUtils.indexOfAny("zzabyycdxx",['b','y']) = 3 StringUtils.indexOfAny("aba", ['z']) = -1
49 indexofany
50 indexofany simplify corner cases
51 indexofany type decls
52 indexofany + when clause
53 indexofany + comprehension
54 indexofany lispify
55 which version is simpler? imperative functional functions 1 1 classes 1 0 internal exit points 2 0 variables 3 0 branches 4 0 boolean ops 1 0 function calls* 6 3 total 18 4
56 which is more general? ; idxs of heads in stream of coin flips (index-filter #{:h} [:t :t :h :t :h :t :t :t :h :h]) -> ( ) ; Fibonaccis pass 1000 at n=17 (first (index-filter #(> % 1000) (fibo))) -> 17
57 which is more general? imperative functional searches strings searches any sequence matches characters matches any predicate returns first match returns lazy seq of all matches
58 what s clojure s unique take on state & concurrency?
59 what about persistent data structures? immutable change by function application maintain performance guarantees full fidelity old versions
60 how would that work with a linked list? your list my list newt tern rabbit
61 and more complex data structures? your trie bit-partitioned tries my trie log2 n: too slow
62 how many tries to make it fast enough? 32-way tries log32 n: fast enough!
63 what s wrong with variables?!?? variable??? identity state variable??? time
64 what s clojure s view of identity identity explicit semantic value value identity value state
65 compare identity, state, & time? term value identity state time meaning immutable data in a persistent data structure series of causally related values over time identity at a point in time relative: before/ simultaneous/after ordering of causal values
66 what is clojure s epochal time model? F F F Process events (pure functions) v1 v2 v3 v4 Observers/ Identity (succession of states) perception/ memory States (immutable values)
67 what s the unified update model? return becomes next state of ref (change-state ref fn [args*]) snapshot always available no user locking, no deadlocks writes never impede readers gets current state of ref
68 software transactional memory
69 how does STM work? v1 v2 v3 v4 v1 v2 v3 v4 v1 v2 v3 v4 v1 v2 v3 v4 F F F F transactions F F F F F F F F
70 what s the syntax for STM? identity (def messages (ref [])) initial value
71 how do you read a value? (deref messages) => => []
72 how do you alter a message? (alter r update-fn & args) oldval r (apply update-fn oldval args) newval
73 how do you update a message? apply an... (defn add-message [msg] (dosync (alter messages conj msg))) scope a transaction...update fn
74 what s cool about clojure? highly expressive language seamless java interop functional advanced concurrency
75 ? s please fill out the session evaluations NEAL FORD director / software architect meme wrangler ThoughtWorks This work is licensed under the Creative Commons Attribution-Share Alike 3.0 License. nford@thoughtworks.com 2002 Summit Boulevard, Atlanta, GA nealford.com thoughtworks.com
Stuart
Clojure Time Stuart Halloway stu@clojure.com @stuarthalloway Copyright 2007-2010 Relevance, Inc. This presentation is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United
More informationClojure. A Dynamic Programming Language for the JVM. Rich Hickey
Clojure A Dynamic Programming Language for the JVM Rich Hickey Clojure Fundamentals 3 years in development, released 10/2007 A new Lisp, not Common Lisp or Scheme Functional emphasis on immutability Supporting
More informationClojure is. A dynamic, LISP-based. programming language. running on the JVM
(first '(Clojure.)) Clojure is A dynamic, LISP-based programming language running on the JVM Origin 2007, Rich Hickey.. 1958, John McCarthy Features Functional Homoiconic Immutability (persistent data
More informationClojure Lisp for the Real clojure.com
Clojure Lisp for the Real World @stuartsierra clojure.com Stuart Sierra Relevance, Inc. Clojure/core Clojure contributor Values Values 3 Values 3 + 2 = 5 Values let x = 3 Values let x = 3 let x = 5 Values
More information.consulting.solutions.partnership. Clojure by Example. A practical introduction to Clojure on the JVM
.consulting.solutions.partnership Clojure by Example A practical introduction to Clojure on the JVM Clojure By Example 1 Functional Progamming Concepts 3 2 Clojure Basics 4 3 Clojure Examples 5 4 References
More informationIntroduction Basics Concurrency Conclusion. Clojure. Marcel Klinzing. December 13, M. Klinzing Clojure 1/18
Clojure Marcel Klinzing December 13, 2012 M. Klinzing Clojure 1/18 Overview/History Functional programming language Lisp dialect Compiles to Java Bytecode Implemented in Java Created by Rich Hickey Version
More informationCPL 2016, week 10. Clojure functional core. Oleg Batrashev. April 11, Institute of Computer Science, Tartu, Estonia
CPL 2016, week 10 Clojure functional core Oleg Batrashev Institute of Computer Science, Tartu, Estonia April 11, 2016 Overview Today Clojure language core Next weeks Immutable data structures Clojure simple
More informationSeminar on Languages for Scientific Computing Aachen, 6 Feb Navid Abbaszadeh.
Scientific Computing Aachen, 6 Feb 2014 navid.abbaszadeh@rwth-aachen.de Overview Trends Introduction Paradigms, Data Structures, Syntax Compilation & Execution Concurrency Model Reference Types Performance
More informationClojure Lisp for the Real #clojure
Clojure Lisp for the Real World @stuartsierra #clojure 1 Bullet Points Values Code is data Generic data access Concurrency 2 Stuart Sierra Relevance, Inc. Clojure/core Clojure contributor 3 Values 4 Values
More informationClojure. A Dynamic Programming Language for the JVM. (and CLR) Rich Hickey
Clojure A Dynamic Programming Language for the JVM (and CLR) Rich Hickey Agenda Fundamentals Rationale Feature Tour Integration with the JVM Q&A Clojure Fundamentals Dynamic a new Lisp, not Common Lisp
More informationSymbols. abstractions, implementing, 270 through indirection, 77 with macros, 183 abstract syntax tree (AST), 149
Index Symbols + (addition operator), 36 37 @, 155, 197 >!! (blocking put), 235 238
More informationPersistent Data Structures and Managed References
Persistent Data Structures and Managed References Clojure s approach to Identity and State Rich Hickey Agenda Functions and processes Identity, State, and Values Persistent Data Structures Clojure s Managed
More informationThis tutorial is designed for all those software professionals who are keen on learning the basics of Clojure and how to put it into practice.
About the Tutorial Clojure is a high level, dynamic functional programming language. It is designed, based on the LISP programming language, and has compilers that makes it possible to be run on both Java
More informationbuilding DSLs with language workbenches
ThoughtWorks building DSLs with language workbenches NEAL FORD software architect / meme wrangler ThoughtWorks nford@thoughtworks.com 3003 Summit Boulevard, Atlanta, GA 30319 www.nealford.com www.thoughtworks.com
More informationcomparing groovy & jruby *
ThoughtWorks comparing groovy & jruby * * please check all knives, guns, pitchforks, and torches at the door NEAL FORD software architect / meme wrangler ThoughtWorks nford@thoughtworks.com 3003 Summit
More informationWeek 2: The Clojure Language. Background Basic structure A few of the most useful facilities. A modernized Lisp. An insider's opinion
Week 2: The Clojure Language Background Basic structure A few of the most useful facilities A modernized Lisp Review of Lisp's origins and development Why did Lisp need to be modernized? Relationship to
More informationClojure. A (not-so-pure) functional approach to concurrency. Paolo Baldan Linguaggi per il Global Computing AA 2016/2017
Clojure A (not-so-pure) functional approach to concurrency Paolo Baldan Linguaggi per il Global Computing AA 2016/2017 In the words of the inventor Functional programming (rooted in Lisp, from 60s old
More informationIdentity, State and Values
Identity, State and Values Clojure s approach to concurrency Rich Hickey Agenda Functions and processes Identity, State, and Values Persistent Data Structures Clojure s Managed References Q&A Functions
More informationWhat if Type Systems were more like Linters?
Typed Clojure An optional type system for Clojure What if Type Systems were more like Linters? Ambrose Bonnaire-Sergeant Me A Practical Optional Type System for Clojure (2012) Typed Clojure Indiegogo Campaign
More informationClojure. The Revenge of Data. by Vjeran Marcinko Kapsch CarrierCom
Clojure The Revenge of Data by Vjeran Marcinko Kapsch CarrierCom Data Processing is what we do Most programs receive, transform, search, and send data Data is raw, immutable information In its essence,
More informationFunctional Programming and the Web
June 13, 2011 About Me Undergraduate: University of Illinois at Champaign-Urbana PhD: Penn State University Retrofitting Programs for Complete Security Mediation Static analysis, type-based compiler Racker:
More informationdesign patterns in ruby
ThoughtWorks design patterns in ruby NEAL FORD software architect / meme wrangler ThoughtWorks nford@thoughtworks.com 3003 Summit Boulevard, Atlanta, GA 30319 www.nealford.com www.thoughtworks.com memeagora.blogspot.com
More informationMacro #clojureconj
Macro Club @stuartsierra #clojureconj 500 sq ft I ( ) If it seems simple, you're probably doing it wrong. You can pry EMACS from my cold, dead fingers. The First Rule of Macro Club You do not
More informationintroduction to jruby
ThoughtWorks introduction to jruby NEAL FORD software architect / meme wrangler ThoughtWorks nford@thoughtworks.com 3003 Summit Boulevard, Atlanta, GA 30319 www.nealford.com www.thoughtworks.com memeagora.blogspot.com
More informationMichiel DomCode, May 26th 2015
ClojureScript ReactJS Michiel Borkent @borkdude DomCode, May 26th 2015 Michiel Borkent (@borkdude) Clojure(Script) developer at Clojure since 2009 Former lecturer, taught Clojure Agenda Part 1: ClojureScript
More informationDeclarative concurrency. March 3, 2014
March 3, 2014 (DP) what is declarativeness lists, trees iterative comutation recursive computation (DC) DP and DC in Haskell and other languages 2 / 32 Some quotes What is declarativeness? ness is important
More informationClojure Concurrency Constructs. CSCI 5828: Foundations of Software Engineering Lecture 12 10/02/2014
Clojure Concurrency Constructs CSCI 5828: Foundations of Software Engineering Lecture 12 10/02/2014 1 Goals Cover the material presented in Chapters 3 & 4 of our concurrency textbook! Books examples from
More information1.3.4 case and case* macro since 1.2. Listing Conditional Branching, Fast Switch. Listing Contract
1.3.4 case and case* macro since 1.2 Listing 3. 14. Conditional Branching, Fast Switch (case [expression & clauses]) case is a conditional statement which accepts a list of testing conditions to determine
More informationTowards Lean 4: Sebastian Ullrich 1, Leonardo de Moura 2.
Towards Lean 4: Sebastian Ullrich 1, Leonardo de Moura 2 1 Karlsruhe Institute of Technology, Germany 2 Microsoft Research, USA 1 2018/12/12 Ullrich, de Moura - Towards Lean 4: KIT The Research An University
More informationRuby: Introduction, Basics
Ruby: Introduction, Basics Computer Science and Engineering College of Engineering The Ohio State University Lecture 3 Ruby vs Java: Similarities Imperative and object-oriented Classes and instances (ie
More informationClojureScript. as a compilation target to JS. Michiel Vijay FP AMS October 16th 2014
ClojureScript as a compilation target to JS Michiel Borkent @borkdude Vijay Kiran @vijaykiran FP AMS October 16th 2014 This work is licensed under a Creative Commons Attribution 4.0 International License.
More informationCS 314 Principles of Programming Languages
CS 314 Principles of Programming Languages Lecture 16: Functional Programming Zheng (Eddy Zhang Rutgers University April 2, 2018 Review: Computation Paradigms Functional: Composition of operations on data.
More informationMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study Johann M. Kraus and Hans A. Kestler AG Bioinformatics and Systems Biology Institute of Neural Information Processing University of Ulm 29.06.2009 Outline
More informationDrinking from the Clojure fire hose
Drinking from the Clojure fire hose This chapter covers Scalars: the base data types Putting things together: collections Making things happen: functions Vars are not variables Locals, loops, and blocks
More informationReference types in Clojure. April 2, 2014
Reference types in Clojure April 2, 2014 Clojure atoms, vars, refs, agents Software transactional memory 2 / 15 From The Joy of Clojure book Time The relative moments when events occur State A snapshot
More informationCSE 413 Languages & Implementation. Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341)
CSE 413 Languages & Implementation Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341) 1 Goals Representing programs as data Racket structs as a better way to represent
More informationA Small Interpreted Language
A Small Interpreted Language What would you need to build a small computing language based on mathematical principles? The language should be simple, Turing equivalent (i.e.: it can compute anything that
More informationLazytest Better Living Through Protocols. Stuart Sierra. Clojure NYC April 15, 2010
Lazytest Better Living Through Protocols Stuart Sierra Clojure NYC April 15, 2010 @stuartsierra #clojure clojure.core: tests as metadata (defn add ([x y] (+ x y)) {:test (fn [] (assert (= 7 (add 3 4))))})
More informationFunctional programming is a productive
Editor: Steve Vinoski vinoski@ieee.org The Functional Web ClojureScript: Functional Programming for JavaScript Platforms Mark McGranaghan Heroku Functional programming is a productive approach to writing
More informationCMSC 330: Organization of Programming Languages. OCaml Imperative Programming
CMSC 330: Organization of Programming Languages OCaml Imperative Programming CMSC330 Spring 2018 1 So Far, Only Functional Programming We haven t given you any way so far to change something in memory
More informationTackling Concurrency With STM. Mark Volkmann 10/22/09
Tackling Concurrency With Mark Volkmann mark@ociweb.com 10/22/09 Two Flavors of Concurrency Divide and conquer divide data into subsets and process it by running the same code on each subset concurrently
More informationTackling Concurrency With STM
Tackling Concurrency With Mark Volkmann mark@ociweb.com 10/22/09 Two Flavors of Concurrency Divide and conquer divide data into subsets and process it by running the same code on each subset concurrently
More informationbuilding dsl s in static & dynamic languages
ThoughtWorks building dsl s in static & dynamic languages NEAL FORD thoughtworker / meme wrangler ThoughtWorks 14 Wall St, Suite 2019, New York, NY 10005 nford@thoughtworks.com www.nealford.com www.thoughtworks.com
More informationCS 11 Haskell track: lecture 1
CS 11 Haskell track: lecture 1 This week: Introduction/motivation/pep talk Basics of Haskell Prerequisite Knowledge of basic functional programming e.g. Scheme, Ocaml, Erlang CS 1, CS 4 "permission of
More informationScala, Your Next Programming Language
Scala, Your Next Programming Language (or if it is good enough for Twitter, it is good enough for me) WORLDCOMP 2011 By Dr. Mark C. Lewis Trinity University Disclaimer I am writing a Scala textbook that
More informationStop coding Pascal. Saturday, April 6, 13
Stop coding Pascal...emotional sketch about past, present and future of programming languages, Python, compilers, developers, Life, Universe and Everything Alexey Kachayev CTO at KitApps Inc. Open source
More informationCOP4020 Programming Assignment 1 - Spring 2011
COP4020 Programming Assignment 1 - Spring 2011 In this programming assignment we design and implement a small imperative programming language Micro-PL. To execute Mirco-PL code we translate the code to
More informationFunctional Programming
Functional Programming CS331 Chapter 14 Functional Programming Original functional language is LISP LISt Processing The list is the fundamental data structure Developed by John McCarthy in the 60 s Used
More informationRails in the Large: Building the Biggest (Enterprise) Rails Application in the World
ThoughtWorks Rails in the Large: Building the Biggest (Enterprise) Rails Application in the World PAUL GROSS software developer / consultant ThoughtWorks NEAL FORD software architect / meme wrangler ThoughtWorks
More informationIntroduction to Clojure Concurrency (and data structures)
Introduction to Clojure Concurrency (and data structures) Karl Krukow, Engineer at Trifork & CTO LessPainful @karlkrukow Goto Amsterdam, May 2012 Introduction to Clojure Concurrency (and data structures)
More informationClojure: Enemy of the State
Clojure: Enemy of the State * * Not actually an enemy of the state, or state in general. :) Alex Miller @puredanger Roadmap Values vs objects Collections Sequences Generic data interfaces Identity and
More informationConcepts of programming languages
Concepts of programming languages Lecture 7 Wouter Swierstra 1 Last time Relating evaluation and types How to handle variable binding in embedded languages? 2 DSLs: approaches A stand-alone DSL typically
More informationReagent. a ClojureScript interface to React. React Amsterdam Meetup 12 Feb. 2015
Reagent a ClojureScript interface to React React Amsterdam Meetup 12 Feb. 2015 Michiel Borkent Twitter: @borkdude Email: michielborkent@gmail.com Clojure(Script) developer at Clojure since 2009 Former
More informationScala : an LLVM-targeted Scala compiler
Scala : an LLVM-targeted Scala compiler Da Liu, UNI: dl2997 Contents 1 Background 1 2 Introduction 1 3 Project Design 1 4 Language Prototype Features 2 4.1 Language Features........................................
More informationDesign Issues. Subroutines and Control Abstraction. Subroutines and Control Abstraction. CSC 4101: Programming Languages 1. Textbook, Chapter 8
Subroutines and Control Abstraction Textbook, Chapter 8 1 Subroutines and Control Abstraction Mechanisms for process abstraction Single entry (except FORTRAN, PL/I) Caller is suspended Control returns
More informationFunctional Programming. Pure Functional Programming
Functional Programming Pure Functional Programming Computation is largely performed by applying functions to values. The value of an expression depends only on the values of its sub-expressions (if any).
More informationClojure for OOP folks Stefan innoq
Clojure for OOP folks Stefan Tilkov @stilkov innoq 1 Motivation 2 Syntax Idioms 3 OOP Thinking model domains with classes & interfaces encapsulate data in objects prefer specific over generic solutions
More informationFunctional Programming. Pure Functional Languages
Functional Programming Pure functional PLs S-expressions cons, car, cdr Defining functions read-eval-print loop of Lisp interpreter Examples of recursive functions Shallow, deep Equality testing 1 Pure
More informationExecutable Formal Specifications with Clojure. Matti Nieminen
Executable Formal Specifications with Clojure Matti Nieminen University of Tampere School of Information Sciences Computer Science M.Sc. Thesis Supervisor: Jyrki Nummenmaa June 2015 University of Tampere
More informationAbout the Tutorial. Audience. Prerequisites. Copyright & Disclaimer. Haskell Programming
About the Tutorial Haskell is a widely used purely functional language. Functional programming is based on mathematical functions. Besides Haskell, some of the other popular languages that follow Functional
More informationMetaprogramming. Concepts of Programming Languages. Alexander Schramm. 2. November Institut für Softwaretechnik und Programmiersprachen
Metaprogramming Concepts of Programming Languages Alexander Schramm Institut für Softwaretechnik und Programmiersprachen 2. November 2015 A. Schramm 2. November 2015 1/39 Table of Contents Introduction
More informationFunctional Languages. CSE 307 Principles of Programming Languages Stony Brook University
Functional Languages CSE 307 Principles of Programming Languages Stony Brook University http://www.cs.stonybrook.edu/~cse307 1 Historical Origins 2 The imperative and functional models grew out of work
More informationFunctional Languages. Hwansoo Han
Functional Languages Hwansoo Han Historical Origins Imperative and functional models Alan Turing, Alonzo Church, Stephen Kleene, Emil Post, etc. ~1930s Different formalizations of the notion of an algorithm
More informationRacket: Macros. Advanced Functional Programming. Jean-Noël Monette. November 2013
Racket: Macros Advanced Functional Programming Jean-Noël Monette November 2013 1 Today Macros pattern-based macros Hygiene Syntax objects and general macros Examples 2 Macros (According to the Racket Guide...)
More informationRuby: Introduction, Basics
Ruby: Introduction, Basics Computer Science and Engineering College of Engineering The Ohio State University Lecture 4 Ruby vs Java: Similarities Imperative and object-oriented Classes and instances (ie
More informationCOP4020 Programming Languages. Functional Programming Prof. Robert van Engelen
COP4020 Programming Languages Functional Programming Prof. Robert van Engelen Overview What is functional programming? Historical origins of functional programming Functional programming today Concepts
More informationCPS506 - Comparative Programming Languages Elixir
CPS506 - Comparative Programming Languages Elixir Dr. Dave Mason Department of Computer Science Ryerson University c 2017 Dave Mason History Joe Armstrong worked at Ericson Erlang originally for lab development
More informationIntro. Scheme Basics. scm> 5 5. scm>
Intro Let s take some time to talk about LISP. It stands for LISt Processing a way of coding using only lists! It sounds pretty radical, and it is. There are lots of cool things to know about LISP; if
More informationNormal Order (Lazy) Evaluation SICP. Applicative Order vs. Normal (Lazy) Order. Applicative vs. Normal? How can we implement lazy evaluation?
Normal Order (Lazy) Evaluation Alternative models for computation: Normal (Lazy) Order Evaluation Memoization Streams Applicative Order: evaluate all arguments, then apply operator Normal Order: pass unevaluated
More informationLecture 8: Summary of Haskell course + Type Level Programming
Lecture 8: Summary of Haskell course + Type Level Programming Søren Haagerup Department of Mathematics and Computer Science University of Southern Denmark, Odense October 31, 2017 Principles from Haskell
More informationIntroducing Wybe a language for everyone
Introducing Wybe a language for everyone Peter Schachte joint work with Matthew Giuca The University of Melbourne Department of Computing and Information Systems 4 December 2013 Peter Schachte (Melbourne)
More informationFirst Programming Language in CS Education The Arguments for Scala
First Programming Language in CS Education The Arguments for Scala WORLDCOMP 2011 By Dr. Mark C. Lewis Trinity University Disclaimer I am writing a Scala textbook that is under contract with CRC Press.
More informationG Programming Languages - Fall 2012
G22.2110-003 Programming Languages - Fall 2012 Lecture 3 Thomas Wies New York University Review Last week Names and Bindings Lifetimes and Allocation Garbage Collection Scope Outline Control Flow Sequencing
More informationScheme. Functional Programming. Lambda Calculus. CSC 4101: Programming Languages 1. Textbook, Sections , 13.7
Scheme Textbook, Sections 13.1 13.3, 13.7 1 Functional Programming Based on mathematical functions Take argument, return value Only function call, no assignment Functions are first-class values E.g., functions
More informationCSCI-GA Scripting Languages
CSCI-GA.3033.003 Scripting Languages 12/02/2013 OCaml 1 Acknowledgement The material on these slides is based on notes provided by Dexter Kozen. 2 About OCaml A functional programming language All computation
More informationExtending Jython. with SIM, SPARQL and SQL
Extending Jython with SIM, SPARQL and SQL 1 Outline of topics Interesting features of Python and Jython Relational and semantic data models and query languages, triple stores, RDF Extending the Jython
More informationReasoning About Programs Panagiotis Manolios
Reasoning About Programs Panagiotis Manolios Northeastern University March 22, 2012 Version: 58 Copyright c 2012 by Panagiotis Manolios All rights reserved. We hereby grant permission for this publication
More informationJVM ByteCode Interpreter
JVM ByteCode Interpreter written in Haskell (In under 1000 Lines of Code) By Louis Jenkins Presentation Schedule ( 15 Minutes) Discuss and Run the Virtual Machine first
More informationCMSC 330: Organization of Programming Languages. OCaml Imperative Programming
CMSC 330: Organization of Programming Languages OCaml Imperative Programming CMSC330 Fall 2017 1 So Far, Only Functional Programming We haven t given you any way so far to change something in memory All
More informationSCHEME AND CALCULATOR 5b
SCHEME AND CALCULATOR 5b COMPUTER SCIENCE 6A July 25, 203 In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,
More informationCS 314 Principles of Programming Languages
CS 314 Principles of Programming Languages Lecture 15: Review and Functional Programming Zheng (Eddy) Zhang Rutgers University March 19, 2018 Class Information Midterm exam forum open in Sakai. HW4 and
More informationClojure Distilled. Immutable
Clojure Distilled The difficulty in learning Clojure does not stem from its syntax, which happens to be extremely simple, but from having to learn new methods for solving problems. As such, we'll focus
More informationSCHEME 7. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. October 29, 2015
SCHEME 7 COMPUTER SCIENCE 61A October 29, 2015 1 Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,
More informationProgramming Clojure, Third Edition
Extracted from: Programming Clojure, Third Edition This PDF file contains pages extracted from Programming Clojure, Third Edition, published by the Pragmatic Bookshelf. For more information or to purchase
More informationChapter 13: Reference. Why reference Typing Evaluation Store Typings Safety Notes
Chapter 13: Reference Why reference Typing Evaluation Store Typings Safety Notes References Computational Effects Also known as side effects. A function or expression is said to have a side effect if,
More informationFunctional Programming. Pure Functional Languages
Functional Programming Pure functional PLs S-expressions cons, car, cdr Defining functions read-eval-print loop of Lisp interpreter Examples of recursive functions Shallow, deep Equality testing 1 Pure
More informationCommon LISP-Introduction
Common LISP-Introduction 1. The primary data structure in LISP is called the s-expression (symbolic expression). There are two basic types of s-expressions: atoms and lists. 2. The LISP language is normally
More informationImperative languages
Imperative languages Von Neumann model: store with addressable locations machine code: effect achieved by changing contents of store locations instructions executed in sequence, flow of control altered
More informationCOMP 202 Java in one week
COMP 202 Java in one week... Continued CONTENTS: Return to material from previous lecture At-home programming exercises Please Do Ask Questions It's perfectly normal not to understand everything Most of
More informationNotes on Higher Order Programming in Scheme. by Alexander Stepanov
by Alexander Stepanov August 1986 INTRODUCTION Why Scheme? Because it allows us to deal with: 1. Data Abstraction - it allows us to implement ADT (abstact data types) in a very special way. The issue of
More informationSummer 2017 Discussion 10: July 25, Introduction. 2 Primitives and Define
CS 6A Scheme Summer 207 Discussion 0: July 25, 207 Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,
More informationIntroduction to Typed Racket. The plan: Racket Crash Course Typed Racket and PL Racket Differences with the text Some PL Racket Examples
Introduction to Typed Racket The plan: Racket Crash Course Typed Racket and PL Racket Differences with the text Some PL Racket Examples Getting started Find a machine with DrRacket installed (e.g. the
More informationQuote of the Day. CS Functional Programming. Introductory Notes on Lisp/Clojure. Another Quote. What is Clojure? 1-4
Quote of the Day CS 326 - Functional Programming Introductory Notes on Lisp/Clojure Dr. Stephen P. Carl By relieving the brain of all unnecessary work, a good notation sets it free to concentrate on more
More informationFrom the λ-calculus to Functional Programming Drew McDermott Posted
From the λ-calculus to Functional Programming Drew McDermott drew.mcdermott@yale.edu 2015-09-28 Posted 2015-10-24 The λ-calculus was intended from its inception as a model of computation. It was used by
More informationScheme Tutorial. Introduction. The Structure of Scheme Programs. Syntax
Scheme Tutorial Introduction Scheme is an imperative language with a functional core. The functional core is based on the lambda calculus. In this chapter only the functional core and some simple I/O is
More informationPERSISTENT SEQUENCES WITH EFFECTIVE RANDOM ACCESS AND SUPPORT FOR INFINITY
JACSM 2014, Vol. 6, No. 1, pp. 67-80 DOI 10.2478/jacsm-2014-0005 PERSISTENT SEQUENCES WITH EFFECTIVE RANDOM ACCESS AND SUPPORT FOR INFINITY Konrad Grzanek IT Institute, University of Social Sciences, Łódź,
More informationProgramming Clojure. Extracted from: Second Edition. The Pragmatic Bookshelf
Extracted from: Programming Clojure Second Edition This PDF file contains pages extracted from Programming Clojure, published by the Pragmatic Bookshelf. For more information or to purchase a paperback
More informationCS558 Programming Languages
CS558 Programming Languages Winter 2017 Lecture 7b Andrew Tolmach Portland State University 1994-2017 Values and Types We divide the universe of values according to types A type is a set of values and
More informationCS 360 Programming Languages Interpreters
CS 360 Programming Languages Interpreters Implementing PLs Most of the course is learning fundamental concepts for using and understanding PLs. Syntax vs. semantics vs. idioms. Powerful constructs like
More informationSCHEME 8. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. March 23, 2017
SCHEME 8 COMPUTER SCIENCE 61A March 2, 2017 1 Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,
More information