Functional Languages
description
Transcript of Functional Languages
![Page 1: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/1.jpg)
Functional Languages
![Page 2: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/2.jpg)
Why?
• Referential Transparency
• Functions as first class objects
• Higher level of abstraction
• Potential for parallel execution
![Page 3: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/3.jpg)
History
• LISP is one of the oldest languages (‘56-’59)!
• AI & John McCarthy
• Roots:– Church’s Lambda Calculus
(Entscheidungsproblem!)– Church’s students
![Page 4: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/4.jpg)
Functional Languages
• LISP and its family– LISP, Common LISP, Scheme
• Haskell
• Miranda
• ML
• FP (John Backus)
![Page 5: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/5.jpg)
Recent Events
• Paul Graham – Hackers and Painters
![Page 6: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/6.jpg)
Lambda Calculus
• Abstract definition of functions
x.x*x
Application:
(x.x*x)5
Multiple arguments
x.(y.x*y)
![Page 7: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/7.jpg)
Evaluation
• Bound Variables• x.(x+y)
• Substitution– M[x/N] – sub N in for x in expression M– Valid when free variables in N are not bound in
M– Variables can be renamed
![Page 8: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/8.jpg)
Evaluation (cont.)
• Beta Reduction– (x.x+y)(z+w)– (x.x+y)[x/(z+w)]– (z+w)+y
![Page 9: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/9.jpg)
Two sides of the Lambda Calculus
• The programming language side is what we have seen
• Also – used for type systems
• The theory side used to proof the Entscheidungsproblem
![Page 10: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/10.jpg)
Defining Numbers
• 0 = f.x.(x)
• 1 = f.x.(fx)
• 2 = f.x.(f(fx))
• Succ = n. (f.(x.(f(n f) x)))
• Add = m. (n. (f.(x.((mf)((nf)x))))))
![Page 11: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/11.jpg)
Combinatory Calculus
• I = x.x
• K = x.y.x
• S = x.y.z.xz(yz)
![Page 12: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/12.jpg)
Church-Rosser Theorem
• Order of application and reduction does not matter!
![Page 13: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/13.jpg)
LISP
• Syntax – parenthesis!
• Functions are written in prefix list form:– (add 4 5)
![Page 14: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/14.jpg)
LISP data structureCELL
A List “(a b c)”
a b c
![Page 15: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/15.jpg)
Evaluation
• LISP assumes a list is a function unless evaluation is stopped!
• (a b c) - apply function a to arguments b and c
• Quote: ‘(a b c) – a list not to be evaluated
![Page 16: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/16.jpg)
List Functions
List Accessors
car: (car ‘(a b c)) -> a
cdr (cdr ‘(a b c)) -> (b c)
![Page 17: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/17.jpg)
List Functions
List constructors
list (list ‘a ‘b) -> (a b)
cons (cons ‘a ‘b) -> (a.b)
What is happening here?
![Page 18: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/18.jpg)
Symbolic Differentiation ExamplePg 226
![Page 19: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/19.jpg)
Haskell
• Better syntax!
• Named for Haskell Curry – a logician
• 1999
![Page 20: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/20.jpg)
Expressions
• Use normal infix notation
• Lists as a fundamental data type (most functional languages provide this)– Enumeration -> evens=[0, 2, 4, 6]– Generation ->
• Moreevens = [ 2*x | x <- [0,1 .. 101]]
– Construction• 8:[] – [8]
![Page 21: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/21.jpg)
Expressions (cont.)
• List accessors – head and tail– head evens – 0– tail evens – [2,4,6]
• List concatenation– [1, 2] ++ [3, 4] – [1, 2, 3, 4]
![Page 22: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/22.jpg)
Control Flow
• If The Else statements
• Functions:name :: Domain -> Range
name <vars>| <s1>
| <s2>
….
![Page 23: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/23.jpg)
Example Function
max3 :: Int -> Int -> Int -> Int
Max3 x y z
| x >=y && x >= z = x
| y >= x && y >= z = y
| otherwise = z
![Page 24: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/24.jpg)
Recursion and Iteration
• Recursion follows the obvious pattern
• Iteration uses lists:– Fact n = product [1 .. N]
• Another pattern for recursion on lists– mySum [] = 0– mySum [x : xs] = x + mySum[xs]
![Page 25: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/25.jpg)
Implementation
• Lazy evaluation
• Eager evaluation
• Graph reduction
![Page 26: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/26.jpg)
SECD Machine
• Four Data Structures (lists)
• S – stack, expression evaluation
• E – environment list of <id, value>
• C – control string (e.g. program)
• D – dump, the previous state for function return
![Page 27: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/27.jpg)
Data types
• Expr – – ID(identifier)
– Lambda(identifier, expr)
– Application(expr1, expr2)
– @ (apply symbol)
• WHNF –– INT(number)
– Primary(WHNF -> WHNF)
– Closure(expr, identifier, list( (identifier, WHNF)))
![Page 28: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/28.jpg)
Data types (cont.)
• Stack – list (WHNF)
• Environment – list ( <identifier, WHNF>)
• Control – list ( expr)
• Dump – list (<Stack, Environment, Control>)
• State – – <Stack, Environment, Control, Dump>
![Page 29: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/29.jpg)
Evaluate Function
• Evaluate maps State -> WHNF
• Cases for Control List empty:
• Evaluate(Result::S,E,nil,nil) -> Result
• Evaluate(x::S,E,nil,(S1,E1,C1)) -> Evaluate(x::S1,E1,C1,D)
![Page 30: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/30.jpg)
Evaluate Function (cont.)
• Evaluate(S,E,ID(x)::C,D) ->
Evaluate(LookUp(x,E)::S,E,C,D)
• Evaluate(S,E,LAMBDA(id,expr),D) -> Evaluate(
Closure(expr,id,E1)::S,
E,C,D)
![Page 31: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/31.jpg)
Evaluate Function (cont.)
• Evaluate(Closure(expr,id,E1)::(arg::S),E, @::C,D) ->
Evaluate(nil,
(id,arg)::E1,
expr,
(S,E,C)::D)
![Page 32: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/32.jpg)
Evaluate Function (cont.)
• Evaluate(Primary(f)::(arg::S),E,@::C,D) -> Evaluate(f(arg)::S,E,C,D)
• Evaluate(S,E,Application(fun,arg)::C,D) -> Evaluate(S,E,arg::(fun::(@::C)),D)
![Page 33: Functional Languages](https://reader035.fdocuments.net/reader035/viewer/2022062520/56815a92550346895dc80a88/html5/thumbnails/33.jpg)
Functional Programming
• Little used in commercial circles
• Used in some research circle
• May hold the future for parallel computation