![Page 1: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/1.jpg)
for B551 (and B351)
Scheme Tutorial
Todd HollowayIndiana University08-31-2007
Please downloadPetite Chez Scheme (Scheme.com)If you haven’t already…
![Page 2: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/2.jpg)
Part 1: Getting Started
![Page 3: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/3.jpg)
Lots of parenthesis (((((((((())))))))))When debugging, check for mismatched
parenthesisLots of lists
Schemers love list processingLots of recursion
Loops are often recursively definedAnd lots of lambdas
Pass variables, functions in many (often imaginative) ways
What to expect…
![Page 4: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/4.jpg)
Petite Chez Scheme Version 7.3
;; semi-colons are used for comments(+ 3 5) ; form is function followed by args
8(+ (* 2 2) (* 5 5)) ; composition of functions
29(length '(1 3 5 9 11)) ; first look at lists
5
Using the Command-Line Interpreter…
![Page 5: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/5.jpg)
(eqv? 42 42) ; take a look at eq?, =, and equal? as well #t
(min 1 3 4 2 3) ; no limit on number of arguments1
(display 8)8
(let ((x 3) (y 4) (z 5)) (display (+ x 1))) ; local vars4
Note: This can be implemented using lambdas instead
More basics…
![Page 6: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/6.jpg)
(cons 1 ‘()) ; concatenation with an empty list (1)
(cons 1 (cons 2 (cons 3 (cons 4 '())))) (1 2 3 4)
(define x (list 1 2 3 )) ; use define to a bind an object to a variable
(car x) ; car returns the first item in a list 1
(cdr x) ; cdr is the list without the first element (2 3)
(cadr x) ; cddr, caddr, etc. 2
Lists…
![Page 7: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/7.jpg)
Syntax: (lambda formal-parameters body)
((lambda (x) (+ x 2)) 5)7
Why?Lambda (x) is asking for 1 argumentWe pass in 5
Lambda…
![Page 8: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/8.jpg)
;; pass in an unspecified number of args(define sum
(lambda (x . y) ; the dot precedes a list (apply + x y))) ;(apply proc arg1 ... args)
(sum 2 2 2 2)8
More lambda…
![Page 9: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/9.jpg)
Part 2: A Little Deeper…
![Page 10: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/10.jpg)
(define factorial (lambda (n)
(if ; Syntax: (if condition consequence alt)
(= n 0) 1 (* n (factorial (- n 1))))))
> (factorial 6)720
A Simple Recursive Program
![Page 11: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/11.jpg)
;; Mutual recursion(define is-even?
(lambda (n) (if (= n 0) #t (is-odd? (- n 1)))))
(define is-odd? (lambda (n)
(if (= n 0) #f (is-even? (- n 1)))))
> (is-odd? 13)#t
More programs…
![Page 12: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/12.jpg)
C coders, in particular, often try to write Scheme in a procedural fashion
(define x 3)(define ugly
(begin(set! x 4) ; global change(set! x (+ 1 x))))
> ugly> x5
On Side Effects
![Page 13: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/13.jpg)
Source files usually end in .ss or .scm> (cd "C:\\B551")> (load “filename.ss")
Use EMACS!!Xemacs.org
Or EclipseEclipse.orgschemeway.sourceforge.net (scheme plugin)
Programming tips…
![Page 14: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/14.jpg)
Part 3: A Little Linear
![Page 15: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/15.jpg)
We will use matrix algebra in our first homework assignment to implement a neural net (B551)
Use the matrix functions from Scheme and Art of Programming chapter 9.4, available at http://ftp.cs.indiana.edu/pub/eopl/sap-source.ssCopy the vector-generator (9.21) and matrix (9.3 –
9.39) procedures into the interpreter or place them in a file called matrix.ss, and place (load “matrix.ss”) at the top of your assignment file.
Matrices
![Page 16: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/16.jpg)
Challenge: What does this do?
(define matrix-generator (lambda (gen-proc)
(lambda (nrows ncols) (let ((size (* nrows ncols))) (let ((vec-gen-proc
(lambda (k) (if (< k size) (gen-proc (quotient k ncols) (remainder k ncols)) ncols))))
((vector-generator vec-gen-proc) (add1 size)))))))
Matrices
![Page 17: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/17.jpg)
(define make-zero-matrix (matrix-generator (lambda (i j) 0)))
> (make-zero-matrix 3 5) ; 3 rows, 5 columns#16(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5)
Matrices
![Page 18: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/18.jpg)
Notes:Not graded, but useful for doing Homework 1—NNUse the code from chapter 9.4 of Scheme and the AOP
1. Create a 20 x 10 matrix of zeroes2. Change the first column into ones3. Transpose the matrix4. Subtract 20 from [0,15]
5. (Additional Practice) Create a procedure replace which takes a list of words, a word to replace, and a replacement word, and returns a list with the replacements made.
Homework 0.5
![Page 19: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/19.jpg)
Part 4: Scheme Resources
![Page 20: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/20.jpg)
Will Byrd is taking B551
Scheme resources…
![Page 21: For B551 (and B351) Todd Holloway Indiana University 08-31-2007 Please download Petite Chez Scheme (Scheme.com) If you haven’t already…](https://reader031.vdocument.in/reader031/viewer/2022013004/56649ebb5503460f94bc3d1d/html5/thumbnails/21.jpg)
Scheme.com/resources.html Including the language manual
Schemers.org Comprehensive list of resources
How to Debug Scheme www.cs.indiana.edu/chezscheme/debug/
Planet Scheme (scheme.dk/planet/) Blog aggregator
Lambda-the-ultimate.org Group blog
Norvig.com Google’s Director of Research
Any others?
Scheme Resources