scheme for python programmers cse 399 005 valeria montero

22
Scheme for Python Programmers CSE 399 005 Valeria Montero

Post on 20-Dec-2015

227 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Scheme for Python Programmers CSE 399 005 Valeria Montero

Scheme for Python Programmers

CSE 399 005Valeria Montero

Page 2: Scheme for Python Programmers CSE 399 005 Valeria Montero

Scheme

LISP origins

AI (MIT): High level features

reprogram

Slower

Teaching

Scheme and Python: Lambda, deep lexicals

Page 3: Scheme for Python Programmers CSE 399 005 Valeria Montero

Scheme vs. Python

Synthax: Prefix vs. main-stream

Lexical Scope: Parentheses vs. Whitespace

Control Structures: Functional

(tail-recursion-optimizing) vs. . . mainstream (while, for loops)

Support: Standard (R5RS, IEEE) vs. not

OOP: indirect support vs.

Standard object system

Orientation: Mathematical vs. Processor

Page 4: Scheme for Python Programmers CSE 399 005 Valeria Montero

Scheme vs. Python Implementation: Many vs. 2 synchronized

. (Portable)

Garbage collection: Strong (cycles) vs. weak

Built in: No standard library vs.

many data types, functions . (regular expressions,

internet connectivity)

Macros vs. not

Scheme great for scripting/extension

Page 5: Scheme for Python Programmers CSE 399 005 Valeria Montero

Getting StartedDefine

;Create new objects: Global Variable or Function

(define <GlobalVariable1> <value1>)

(define <function1 <expression1>)

Operators

(<operator> <expression1> <expression2> …)

Common Operators: and, or, not, -, +, *, %, /

Page 6: Scheme for Python Programmers CSE 399 005 Valeria Montero

Scheme

Python

Pre-Operator Order

(< a b) => #t(+ 3 5) => 8(and #t #f) => #f(Blocks)

Page 7: Scheme for Python Programmers CSE 399 005 Valeria Montero

Quick Sort

Page 8: Scheme for Python Programmers CSE 399 005 Valeria Montero
Page 9: Scheme for Python Programmers CSE 399 005 Valeria Montero

Conditional(cond (<condition1> <execute1>)      (<condition2> <execute2>)            (<conditionn> <executen>))

Absolute Value:

(define (abs x)  (cond ((< x 0) (- x))        (x)))

Python:IfElifElse

Page 10: Scheme for Python Programmers CSE 399 005 Valeria Montero

CAR and CDR

(car list) => first element

(car '(a b c))  => a

(cdr list) => list excluding car

(cdr '(a b c))  => (b c)

Page 11: Scheme for Python Programmers CSE 399 005 Valeria Montero

Play Around with Nested Lists:

Reference maximum four car/cdr

(cadar '((1 2 3) 3)) => 2

(cadr '(1 2 3)) => 2

(cadar '((1 2 3) 4 5 6)) => 2

(cddddr '(1 2 3 4 5 6)) =>(5 6)

Page 12: Scheme for Python Programmers CSE 399 005 Valeria Montero

APPEND and CONS

Append: Concatenates two listsCons: Constructs list with input: car, cdr

> (append '(1 2) '(3 4))(1 2 3 4)> (cons '(1 2) '(3 4))((1 2) 3 4)

Page 13: Scheme for Python Programmers CSE 399 005 Valeria Montero
Page 14: Scheme for Python Programmers CSE 399 005 Valeria Montero

Let

Variables are bounded locally within Let body.

(let ((variable1 value1) ...) expression1 expression2 ...)

(let ((a (* 4 4)))  (+ a a))  => 32

(let ((+ *))  (+ 2 3))  => 6

Absolute Value:

(define (abs n) (let ((a n) (b (-n))) (max a b)))

Page 15: Scheme for Python Programmers CSE 399 005 Valeria Montero

Let vs. Let*

Let evaluates the variables in parallel.

Let* evaluates the variables sequentially.

(let ((a 5)

(b (* a 10)))

b)

=> reference to undefined identifier: a

(let* ((a 5)

(b (* a 10)))

b)

=> 50

Python

Parallel assignments

a, b = b, a

Page 16: Scheme for Python Programmers CSE 399 005 Valeria Montero
Page 17: Scheme for Python Programmers CSE 399 005 Valeria Montero

Scheme Functional Programming: Lambda Calculus

COND Absolute Value:

(define (abs x)  (cond ((< x 0) (- x))        (x)))

LET Absolute Value:

(define (abs n) (let ((a n) (b (-n))) (max a b)))

Lambda (λ)((lambda (variable1 ...) expression1 expression2 ...)  value1 ...)

λ Absolute Value:

(define abs (λ (n) (if (>= n 0) n (- n))))

Page 18: Scheme for Python Programmers CSE 399 005 Valeria Montero

List Recursion Style Style Style …

Page 19: Scheme for Python Programmers CSE 399 005 Valeria Montero

Permutations

Page 20: Scheme for Python Programmers CSE 399 005 Valeria Montero

For Comparison

Page 21: Scheme for Python Programmers CSE 399 005 Valeria Montero

Do: Iterative vs. Recursive

(do ((variable1 value1) (variable2 value2) …) ((exitCondition) (exitFunction)) Body)

Page 22: Scheme for Python Programmers CSE 399 005 Valeria Montero

Fun Debugging in DrScheme

(car '())

> car: expects argument of type <pair>; given ()

UESTIONS?