1 / 15

COP4020 Programming Languages

COP4020 Programming Languages. Functional Programming Prof. Xin Yuan. Topics. Functional programming with Scheme Learn by examples. Defining Global Names. A global name is defined with the “define” special form (define name value ) Usually the values are functions (lambda abstractions)

mevenson
Download Presentation

COP4020 Programming Languages

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. COP4020Programming Languages Functional Programming Prof. Xin Yuan

  2. Topics • Functional programming with Scheme • Learn by examples COP4020 Spring 2014

  3. Defining Global Names • A global name is defined with the “define” special form(define namevalue) • Usually the values are functions (lambda abstractions) • Examples: • (define my-name ''foo'') • (define determiners '(''a'' ''an'' ''the'')) • (define sqr (lambda (x) (* x x))) • (define twice (lambda (f a) (f (f a)))) • (twice sqr 3)  ((lambda (f a) (f (f a))) (lambda (x) (* x x)) 3)  …  81 COP4020 Spring 2014

  4. Defining Global Names • A global name defined with a lambda express in essence creates a named function. • This allows recursion – one of the most important/useful concept in scheme. • (define fab (lambda (x) (if (= x 0) 0 (if (=x 1) 1 (+ (fab (- x 1)) (fab (- x 2))))))) • Define a function that computes the sum of all elements in a list. • Define a function that put an element at the end of a list COP4020 Spring 2014

  5. Load program from file • Load function • (load filename) load the program from a file • (load “myscheme”): load the program in “myscheme.scm” • After load, one has access to all global names in the program. COP4020 Spring 2014

  6. I/O • (display x) prints value of x and returns an unspecified value • (display "Hello World!")Displays: "Hello World!" • (display (+ 2 3))Displays: 5 • (newline) advances to a new line • (read) returns a value from standard input • (if (member (read) '(6 3 5 9)) "You guessed it!" "No luck")Enter: 5Displays: You guessed it! • (read-line) returns the string in a line (without the “\n”). COP4020 Spring 2014

  7. I/O with files Open file for reading: (open-input-file filename) Open file for writing: (open-output-file filename) Read one character from a file: (read-char file) Read a scheme object from file: (read file) Check the current character in a file without consuming the character: (peek-char file) Check end-of-file: (eof-object? (peek-char file)) Write one character to a file: (write-char char file) Write a scheme object to file: (write object file) Close file: (close-port file) COP4020 Spring 2014

  8. Blocks • (begin x1x2 … xn) sequences a series of expressions xi, evaluates them, and returns the value of the last one xn • Examples: • (begin   (display "Hello World!")   (newline) ) COP4020 Spring 2014

  9. Example 1: define factorial function: fact(n) = 1*2*3*…*n COP4020 Spring 2014

  10. Example 1: define factorial function: fact(n) = 1*2*3*…*n • Recursive factorial:(define fact   (lambda (n)     (if (zero? n) 1 (* n (fact (- n 1))))   ) ) • (fact 2)  (if (zero? 2) 1 (* 2 (fact (- 2 1))))  (* 2 (fact 1))  (* 2 (if (zero? 1) 1 (* 1 (fact (- 1 1)))))  (* 2 (* 1 (fact 0)))  (* 2 (* 1 (if (zero? 0) 1 (* 0 (fact (- 0 1))))  (* 2 (* 1 1))  2 COP4020 Spring 2014

  11. Example 2 • Sum the elements of a list(define sum   (lambda (lst)      (if (null? lst)       0       (+ (car lst) (sum (cdr lst)))    )   ) ) • (sum '(1 2 3))  (+ 1 (sum (2 3)) (+ 1 (+ 2 (sum (3)))) (+ 1 (+ 2 (+ 3 (sum ())))) (+ 1 (+ 2 (+ 3 0))) COP4020 Spring 2014

  12. Example 3 • Generate a list of n copies of x(define fill (lambda (n x) ??? )) COP4020 Spring 2014

  13. Example 3 • Generate a list of n copies of x(define fill (lambda (n x) (if (= n 0) () (cons x (fill (- n 1) x))) )) • (fill 2 'a)  (cons a (fill 1 a))  (cons a (cons a (fill 0 a)))  (cons a (cons a ()))  (a a) COP4020 Spring 2014

  14. Example 4 • Replace x with y in list xs(define subst (lambda (x y xs) ??? )) COP4020 Spring 2014

  15. Example 4 • Replace x with y in list xs(define subst (lambda (x y xs) (cond ((null? xs) ()) ((eq? (car xs) x) (cons y (subst x y (cdr xs)))) (else (cons (car xs) (subst x y (cdr xs)))) ) )) COP4020 Spring 2014

More Related