evaluators for functional programming
DESCRIPTION
Evaluators for Functional Programming. Chapter 4. How to describe (specify) a programming language?. Syntax : atoms, primitives, combination and abstraction means. Semantics: values, types. Operational semantics: evaluation rules, evaluator algorithm. Evaluator for Functional Programming. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/1.jpg)
Chapter 4 - Evaluators for Functional Programming
1
Evaluators for FunctionalProgramming
Chapter 4
![Page 2: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/2.jpg)
Chapter 4 - Evaluators for Functional Programming
2
How to describe (specify) a programming language?
1. Syntax: atoms, primitives, combination and abstraction means.
2. Semantics: values, types. 3. Operational semantics: evaluation rules,
evaluator algorithm.
![Page 3: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/3.jpg)
Chapter 4 - Evaluators for Functional Programming
3
Evaluator for Functional Programming
• meta-circular : – Interpreted language = our flavor of Scheme–(embedding) language = Scheme
• We will see three evaluators for FP: 1. Substitution evaluator (impl. applicative-eval)2. Environment-based evaluator
(uses an environment data structure)3. Environment-based compiler
![Page 4: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/4.jpg)
Chapter 4 - Evaluators for Functional Programming
4
Evaluator Structure
program in interpretedlanguage Value from
interpreted language values (Global)
Environment
evaluator
eval
substitute -reduce
written in Implementation (embedding) language
![Page 5: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/5.jpg)
Chapter 4 - Evaluators for Functional Programming
5
common evaluator structure
abstract syntax parser
program in interpretedlanguage
Value from interpreted
language values
(Global) Environment
evaluator
parsed expression(parse tree)
eval
substitute -reduce
![Page 6: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/6.jpg)
Chapter 4 - Evaluators for Functional Programming
6
basic compiler structure
abstract syntax parser
program in interpretedlanguage Value from
target language values
Global Environment
compiler
parsed expression(parse tree)
compilationprogram in
target language
execution/ evaluation
![Page 7: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/7.jpg)
Chapter 4 - Evaluators for Functional Programming
7
evaluator structure
Scheme expression
Value
(Global) Environment
evaluator
Code in: Racket-Evaluators\substitution-interpreter\
![Page 8: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/8.jpg)
Chapter 4 - Evaluators for Functional Programming
8
Input• Input: a scheme expression or an already evaluated
scheme expression (in case of repeated evaluation).
(lambda (lst) (car (car lst))
• Input is accepted in the form of constant lists.
'(lambda (lst) (car (car lst)))(list 'lambda (list 'lst) (list 'car (list 'car 'lst))
• uniformity of Scheme expressions and the printed form of lists.
![Page 9: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/9.jpg)
Chapter 4 - Evaluators for Functional Programming
9
Input> (derive-eval '(+ 1 2) )3
> (derive-eval (list 'lambda (list 'lst) (list 'car (list 'car 'lst)) ))
(procedure (lst) ((car (car lst))))
> (derive-eval '(lambda (lst) (car (car 'lst))) )(procedure (lst) ((car (car lst))))
> (derive-eval (lambda (lst) (car (car lst)) )). . ASP.scm:247:31: car: expects argument of type
<pair>; given #<procedure>
![Page 10: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/10.jpg)
Chapter 4 - Evaluators for Functional Programming
10
Abstract Syntax Parser (ASP)
A tool that1. Identifies the kind of an input expression (atomic,
lambda, application, etc)2. Select the components of a Scheme expression3. Construct a Scheme expression from its components
Impl. an interface for Scheme Expression, according to Abstract Syntax of Scheme.
![Page 11: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/11.jpg)
Chapter 4 - Evaluators for Functional Programming
11
Derived Expressions
Language expression have two classes:• Kernel (core knows what to do with them)• Derived (rewritten using kernel expressions –
more on that later)
![Page 12: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/12.jpg)
Chapter 4 - Evaluators for Functional Programming
12
Tagged-data interface and impl.
![Page 13: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/13.jpg)
Chapter 4 - Evaluators for Functional Programming
13
Tagged-data interface and impl.
![Page 14: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/14.jpg)
Chapter 4 - Evaluators for Functional Programming
14
Parser procedures - atomic exp.
![Page 15: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/15.jpg)
Chapter 4 - Evaluators for Functional Programming
15
Parser procedures - compound exp.
![Page 16: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/16.jpg)
Chapter 4 - Evaluators for Functional Programming
16
Parser procedures - compound exp.
![Page 17: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/17.jpg)
Chapter 4 - Evaluators for Functional Programming
17
Parser procedures - compound exp.
![Page 18: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/18.jpg)
Chapter 4 - Evaluators for Functional Programming
18
Parser procedures - compound exp.
![Page 19: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/19.jpg)
Chapter 4 - Evaluators for Functional Programming
19
Parser procedures - compound exp.
![Page 20: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/20.jpg)
Chapter 4 - Evaluators for Functional Programming
20
Parser procedures - compound exp.
![Page 21: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/21.jpg)
Chapter 4 - Evaluators for Functional Programming
21
Parser procedures - compound exp.
![Page 22: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/22.jpg)
Chapter 4 - Evaluators for Functional Programming
22
Parser procedures - compound exp.
letrec - similar functions...
![Page 23: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/23.jpg)
Chapter 4 - Evaluators for Functional Programming
23
Parser procedures - compound exp.
![Page 24: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/24.jpg)
Chapter 4 - Evaluators for Functional Programming
24
Parser procedures - application• The application expression is special compound expression: It
does not have a tag.
![Page 25: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/25.jpg)
Chapter 4 - Evaluators for Functional Programming
25
ASP - Derived expressions
'derived' expression are translated into 'core' expressions (according to syntactic sugar/macro rule), before being evaluated.
Derivation procedures are part of the ASP; Signature: derive(exp); Type: [Scheme-exp -> Scheme-exp ]
![Page 26: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/26.jpg)
Chapter 4 - Evaluators for Functional Programming
26
ASP - Derived expressions
(define let->combination(lambda (exp)
(let ((vars (let-variables exp)) (body (let-body exp))
(initial-vals (let-initial-values exp))) (make-application (make-lambda vars body)
initial-vals))))
(let ((x (+ y 2)) (y (- x 3)))
(* x y))
((lambda (x y)(* x y))
(+ y 2) (- x 3))
![Page 27: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/27.jpg)
Chapter 4 - Evaluators for Functional Programming
27
ASP - Derived expressions
(define (f x y)(display x) (+ x y))
(define f(lambda (x y)
(display x)(+ x y)))
(define function-define->define (lambda (exp) (let ((var (function-definition-variable exp))
(params (function-definition-parameters exp))(body (function-definition-body exp)))
(make-definition var (make-lambda params body)))))
![Page 28: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/28.jpg)
Chapter 4 - Evaluators for Functional Programming
28
ASP - Derived expressions
• cond->if
(cond ((> x 0) x) ((= x 0) (display ’zero) 0) (else (- x)))
(if (> x 0)x(if (= x 0) (begin (display ’zero) 0) (- x)))
![Page 29: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/29.jpg)
Chapter 4 - Evaluators for Functional Programming
29
ASP - Derived expressions(cond ((> x 0) x)
(else (cond ((= x 0) 0)(else (- x))))))
(if (> x 0) x (cond ((= x 0) 0)
(else (- x))))
(if (> x 0) x (if(= x 0)
0 (- x)))
shallow derivation
deep (recursive) derivation
![Page 30: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/30.jpg)
Chapter 4 - Evaluators for Functional Programming
30
ASP - Derived expressions(let*((x 10)
(y (+ x 2)) (+ x y))
(let((x 10)) (let ((y (+ x 2)))
(+ x y)))
((lambda(x) (let ((y ....)) 10)
shallow derivation
recursive derivation until fixed point achieved
![Page 31: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/31.jpg)
Chapter 4 - Evaluators for Functional Programming
31
![Page 32: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/32.jpg)
Chapter 4 - Evaluators for Functional Programming
32
![Page 33: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/33.jpg)
Chapter 4 - Evaluators for Functional Programming
33
evaluator structure
Scheme expression
Value
(Global) Environment
evaluator
Code in: Racket-Evaluators\substitution-interpreter\
![Page 34: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/34.jpg)
Chapter 4 - Evaluators for Functional Programming
34
Applicative-Eval Evaluator Core
data structures:
1. Evaluated values
2. The global environment – managing "global" variable-value bindings.
![Page 35: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/35.jpg)
35
Evaluated values• Repeated evaluation of compound values:
applicative-eval[((lambda (lst)(car lst)) (list 1 2 3))] applicative-eval[(lambda (lst)(car lst))] <== <Closure (lst)(car lst) >applicative-eval[(list 1 2 3)] <== (1 2 3) // evaluated value of list
applicative-eval[ (car (1 2 3)) ] ==>applicative-eval[car] <== Code of car.applicative-eval[(1 2 3)] <== "error: 1 is not a procedure"
• Same problem for values of lambda, quote (and other possible compound values) and primitive procedures.
• Need to identify (tag), evaluated values. Chapter 4 - Evaluators for Functional Programming
![Page 36: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/36.jpg)
Chapter 4 - Evaluators for Functional Programming
36
Evaluated values ADTsPrimitive-procedure make-primitive-procedure [T -> Primitive-procedure]
primitive-procedure? [T –> Boolean]primitive-implementation [Primitive-procedure –> T]
Procedure make-procedure [LIST(Symbol)*LIST –> Procedure]compound-procedure? procedure-parameters [Procedure –> LIST(Symbol)]procedure-body [Procedure –> LIST]
Other make-valuevalue?value-content
![Page 37: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/37.jpg)
Chapter 4 - Evaluators for Functional Programming
37
Primitive procedure - Impl.
![Page 38: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/38.jpg)
Chapter 4 - Evaluators for Functional Programming
38
Procedure - Impl.
![Page 39: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/39.jpg)
Chapter 4 - Evaluators for Functional Programming
39
evaluator structure
Scheme expression
Value
(Global) Environment
evaluator
Code in: Racket-Evaluators\substitution-interpreter\
![Page 40: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/40.jpg)
Chapter 4 - Evaluators for Functional Programming
40
The global environment• mutable binding management.
mapping from "global" variables to values.
![Page 41: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/41.jpg)
Chapter 4 - Evaluators for Functional Programming
41
The global environment
GE procedures:
![Page 42: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/42.jpg)
Chapter 4 - Evaluators for Functional Programming
42
The global environment Impl.The lookup procedure
![Page 43: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/43.jpg)
Chapter 4 - Evaluators for Functional Programming
43
The global environment Impl.Adding the primitive bindings
![Page 44: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/44.jpg)
44
The global environment Impl.
Chapter 4 - Evaluators for Functional Programming
....
![Page 45: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/45.jpg)
Chapter 4 - Evaluators for Functional Programming
45
The global environment Impl. - lookup
![Page 46: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/46.jpg)
Chapter 4 - Evaluators for Functional Programming
46
The global environment Impl. - mutator
![Page 47: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/47.jpg)
Chapter 4 - Evaluators for Functional Programming
47
evaluator structure
Scheme expression
Value
(Global) Environment
evaluator
Code in: Racket-Evaluators\substitution-interpreter\
![Page 48: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/48.jpg)
Chapter 4 - Evaluators for Functional Programming
48
Applicative-Eval Evaluator - core
• Implementation of applicative eval algorithm.• Derives expressions• Special form/Atomic/Application• Application: Eval-substitute-reduce (recursive).• Has 'rename' and 'substitute' sub-routines• Uses: ASP (parser), GE packages• Creates Evaluated Values and returns them.
![Page 49: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/49.jpg)
Chapter 4 - Evaluators for Functional Programming
49
Applicative-Eval Evaluator - core
![Page 50: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/50.jpg)
Chapter 4 - Evaluators for Functional Programming
50
Applicative-Eval Evaluator - core
![Page 51: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/51.jpg)
Chapter 4 - Evaluators for Functional Programming
51
Applicative-Eval Evaluator - core
![Page 52: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/52.jpg)
Chapter 4 - Evaluators for Functional Programming
52
Applicative-Eval Evaluator - coreatomic exp.
![Page 53: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/53.jpg)
Chapter 4 - Evaluators for Functional Programming
53
Applicative-Eval Evaluator - corespecial forms
![Page 54: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/54.jpg)
Chapter 4 - Evaluators for Functional Programming
54
Applicative-Eval Evaluator - corespecial forms
![Page 55: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/55.jpg)
Chapter 4 - Evaluators for Functional Programming
55
Applicative-Eval Evaluator - corespecial forms
![Page 56: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/56.jpg)
Chapter 4 - Evaluators for Functional Programming
56
Applicative-Eval Evaluator - coreapplication
![Page 57: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/57.jpg)
Chapter 4 - Evaluators for Functional Programming
57
Applicative-Eval Evaluator - coreprimitive procedure application
![Page 58: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/58.jpg)
Chapter 4 - Evaluators for Functional Programming
58
Applicative-Eval Evaluator - coresubstitution
![Page 59: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/59.jpg)
Chapter 4 - Evaluators for Functional Programming
59
Applicative-Eval Evaluator - coresubstitution (continued)
![Page 60: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/60.jpg)
Chapter 4 - Evaluators for Functional Programming
60
evaluator structure
Scheme expression
Value
(Global) Environment
evaluator
Code in: Racket-Evaluators\substitution-interpreter\
![Page 61: Evaluators for Functional Programming](https://reader036.vdocuments.us/reader036/viewer/2022081507/568161dd550346895dd1ec9d/html5/thumbnails/61.jpg)
Chapter 4 - Evaluators for Functional Programming
61
Applicative-Eval Evaluator - tests> (derive-eval '(* 3 4)) '(value 12)> (derive-eval '((lambda (f) (f 2 1)) +)) '(value 3)
Regression tests:(test (derive-eval '(* 3 4)) => '(value 12))(test (derive-eval '(cons 3 (cons 4 (list)))) => '(value (3 4)))(test (derive-eval '((lambda (f) (f 2 1)) +)) => '(value 3))(test (derive-eval '(begin 1 2 3)) => '(value 3))(test (derive-eval '(begin 1 2 3)) => '(value 3))(test (derive-eval '(define x 2)) => 'ok) (test (derive-eval '(define (f x) (+ x x))) => 'ok) (test (derive-eval 'x) => '(value 2)) (test (derive-eval '(f x)) => '(value 4))(test (derive '(let ((x 1)) (+ x 1))) => '( (lambda (x)(+ x 1)) 1))