1 / 15

Introduction to Scheme

Introduction to Scheme. Lisp and Scheme. Lisp: List processor language Full recursion Conditional expression Extensibility Interactive Scheme: one of most popular dialects of Lisp. ( Another popular one: common lisp). Dr.Scheme.

moeshe
Download Presentation

Introduction to Scheme

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. Introduction to Scheme

  2. Lisp and Scheme • Lisp: List processor language • Full recursion • Conditional expression • Extensibility • Interactive • Scheme: one of most popular dialects of Lisp. ( Another popular one: common lisp)

  3. Dr.Scheme • Download Dr. Scheme from http://download.plt-scheme.org/drscheme/ • Install Dr. Scheme in your computer • Set language: “advanced student”

  4. Primitive Elements • Atoms • A string of characters beginning with a letter, digit or special character other than a single left or right parenthesis. • Lists • (atoms +/or lists) • Null • Define a atom and a list in Dr. Scheme

  5. Evaluation • Read->evaluate->print • Imperative language • f(x) • g(x, y, z) • Lisp • (f x) • (g x y z) • In a list, first element is expected to be a function which uses remaining elements as arguments

  6. Manipulating lists • car: get the first element of list • cdr: get the rest of list • caar: get the first item of the first list in a list • cadr: get the second item of a non-empty list • cadar: get the second item of the first list of a list • caddr: get the third item of a non-empty list • cons: construct a list by two lists or a list and an atom. The second argument must be a list.

  7. How they come? • caar == car(car list) • cadr == car(cdr list) • cadar == car(cdr(car list)) • caddr == car(cdr(cdr list))

  8. A problem to solve A farmer is taking a fox, goose and bag of corn to market and must cross a river. The river has a boat that can hold the farmer and one item, so he must make multiple crossings while leaving some items unattended. If the fox gets a chance, it will eat the goose; likewise the goose will eat the corn. What’s a pair farmer to do?

  9. Valid States • Representation: (left-bank list, right-bank list) • Initial state: ((fox goose corn boat) ()) • Tasks - define functions: • (left-bank state) : (fox goose corn boat) • (right-bank state): null • Another states: • ((fox corn) (goose boat)) • ((goose boat) (fox corn)) • Final state: (()(fox goose corn boat))

  10. Defining functions • (define function_name (lambda (args) expressions ) ) • Function call: (function_name args)

  11. Exercise • Current state := ((state on left bank)(state on right bank)) • Define initial state initState to be ((fox goose corn boat)()) • Write a function leftBank that returns state on left bank based on current state • Write a function rightBank that returns state on right bank based on current state

  12. In scheme: (cond (cond1 val1) (cond2 val2) … (condn valn) (else default-val) ) In imperative language: if(cond1) return val1; else if(cond2) return val2; …. else if(condn) return valn; else return default-val; Conditional expressions

  13. Useful build-in functions • (eq? val1 val2) -- compare two values • Return true if the two values are the same • (> val1 val2) -- compare numbers for greater-than • (< val1 val2) -- compare numbers for less-than • (= val1 val2) -- compare numbers for equality • (null? val) – if the value is empty list

  14. Exercise • Write a function called otherBank that returns RIGHT if bank==LEFT returns LEFT if bank==RIGHT and otherwise returns HUH

  15. Recursive list processing • If we want to process elements of a list L with function f • First, process first element of L : f( car L) • Next , recursively process rest of L: (cdr L) • Exercise: • Write a function isThere to test if x is on list L

More Related