CSE 130 Lecture Notes - Lecture 3: Syntactic Sugar, Evaluation Strategy, Function Application
11 views3 pages
17 Jan 2018
School
Department
Course
Professor

JS functions
( function() { w/ syntactic sugar: ( () => {
}) (); }) ();
Fundamentals and Lambda Calculus
-simplest “reasonable” programming language
-one feature: functions
-good for studying binding
-competes against “Turing machines”
-use lambda calculus to extend to different features
- control flow, operators, classes, etc…
-”evaluation strategy” - only evaluate IF it needs to be used
Syntax - symbols used to describe programs
Def func:, x+y, cout << “yo”;
Semantics - the “meaning” of the program and how we interpret it
-what’s a PL implementation of Syntax -> Semantics? Functions
Expressions: e ::= x | ƛx.e | e1e2
- Variables: x,y,z,etc.
-ƛ abstractions (function): ƛx . e
Name arg whatever in function
- same a s x => e in JS
- Do something w/ functions:e1 e2
- Function e1 is “applied” to function/var/etc. E2
- Same as e1(e2) in JS
Examples:
-ƛx.(2+x) ← NOT valid! There is NO + in ƛ calculus
Assume 2 AND + are encoded by functions
- In JS: x => 2 + x
- (ƛx.(2+x)) 5
- In JS: (x => 2+x) (5)
x = > { return 2 + x; }
- (ƛf.(f 3)) (ƛx.(x + 1))
- In JS: ( f => f(3) ) ( x => x+1 )
Composition: (f o f) (x)
In JS:
f => (x => f ( (x))) //argument f that returns a function which takes in x as an argument and
//returns f(f(x))
In ƛ:
ƛf. (ƛx. f (f x))