+ All Categories
Home > Documents > Scheme A Language of Function JP Deshaies and Josh Calloway.

Scheme A Language of Function JP Deshaies and Josh Calloway.

Date post: 16-Jan-2016
Category:
Upload: dale-skinner
View: 221 times
Download: 0 times
Share this document with a friend
Popular Tags:
37
Scheme A Language of Function A Language of Function JP Deshaies and Josh Calloway JP Deshaies and Josh Calloway
Transcript
Page 1: Scheme A Language of Function JP Deshaies and Josh Calloway.

Scheme

A Language of FunctionA Language of Function

JP Deshaies and Josh CallowayJP Deshaies and Josh Calloway

Page 2: Scheme A Language of Function JP Deshaies and Josh Calloway.

In the beginning there was LISP … and LISP begat Scheme.

Page 3: Scheme A Language of Function JP Deshaies and Josh Calloway.

Way back when FORTRAN was cool … The development of LISP was started in the late The development of LISP was started in the late

1950’s by John McCarthy and company (MIT) as 1950’s by John McCarthy and company (MIT) as and extension of the relatively new language and extension of the relatively new language FORTRAN.FORTRAN.

LISP was intended to simplify the processing of LISP was intended to simplify the processing of symbols and lists by using Polish type notation symbols and lists by using Polish type notation and functions. Scheme and LISP are type-less and functions. Scheme and LISP are type-less languages. languages.

LISP is the first “function”-al language.LISP is the first “function”-al language.

Page 4: Scheme A Language of Function JP Deshaies and Josh Calloway.

Yeah, but will it compile?

LISP went through approximately 3 revisions LISP went through approximately 3 revisions before an interpreter/compiler was even properly before an interpreter/compiler was even properly considered. Assembly code was hashed to considered. Assembly code was hashed to compile only certain components as needed.compile only certain components as needed.

The functional paradigm was credible and very The functional paradigm was credible and very useful and quite rapidly moved away from useful and quite rapidly moved away from FORTRAN.FORTRAN.

There were no standards devised this early and There were no standards devised this early and LISP began to change, evolve, and spread.LISP began to change, evolve, and spread.

Page 5: Scheme A Language of Function JP Deshaies and Josh Calloway.

I can make it speak with a LISP …

It became the favorite of AI researchers at MIT It became the favorite of AI researchers at MIT and elsewhere and continues to be the oldest and and elsewhere and continues to be the oldest and most widespread language in AI.most widespread language in AI.

Throughout the 60’s and 70’s, LISP’s lack of a Throughout the 60’s and 70’s, LISP’s lack of a real standard gave way to an incredible array of real standard gave way to an incredible array of dialects.dialects.

(Common LISP is probably the most widely used but I ran across (Common LISP is probably the most widely used but I ran across about 30 and references to many more.)about 30 and references to many more.)

Page 6: Scheme A Language of Function JP Deshaies and Josh Calloway.

I need rules, man!

In 1975, Sussman and Steele (MIT) decided to “modernize In 1975, Sussman and Steele (MIT) decided to “modernize and clean-up” LISP and create a practical version for and clean-up” LISP and create a practical version for scientific computation which they called Scheme.scientific computation which they called Scheme.

Scheme is and abbreviation of schemer, and was one of Scheme is and abbreviation of schemer, and was one of three AI languages derived about the same time. three AI languages derived about the same time.

((The other two, Planner and Conniver, didn’t really take off.) The other two, Planner and Conniver, didn’t really take off.)

Scheme was created to stress “conceptual elegance and Scheme was created to stress “conceptual elegance and simplicity” so often favored by scientists.simplicity” so often favored by scientists.

Page 7: Scheme A Language of Function JP Deshaies and Josh Calloway.

Interesting facts …

Scheme was one of the first programming languages Scheme was one of the first programming languages to incorporate first class procedures (procedures that to incorporate first class procedures (procedures that pass/return variables and functions).pass/return variables and functions).

The standard for Scheme is only about 50 pages The standard for Scheme is only about 50 pages whereas the standard for Common Lisp is about whereas the standard for Common Lisp is about 1300 pages.1300 pages.

Scheme supports multiple paradigms:Scheme supports multiple paradigms: FunctionalFunctional Object orientedObject oriented ImperativeImperative

Page 8: Scheme A Language of Function JP Deshaies and Josh Calloway.

More fun facts …

Its ability to present complex Its ability to present complex ideas/abstractions with simple primitives ideas/abstractions with simple primitives makes scheme a jack-of-all-trades teaching makes scheme a jack-of-all-trades teaching tool for entry level programmers.tool for entry level programmers.

Scheme (like LISP) has a multitude of Scheme (like LISP) has a multitude of decendants.decendants.

For example:For example:

Page 9: Scheme A Language of Function JP Deshaies and Josh Calloway.

Bigloo, Chez Scheme, Bigloo, Chez Scheme, Chicken, Elk, Gambit, Chicken, Elk, Gambit, Gauche, Guile, Gauche, Guile, Hotdog, Kawa, KSI, Hotdog, Kawa, KSI, KSM, Larceny, KSM, Larceny, LispMe, MIT Scheme, LispMe, MIT Scheme, OpenScheme, PLT OpenScheme, PLT Scheme, Pocket Scheme, Pocket Scheme, Scheme,

PS3I, QScheme, PS3I, QScheme, Rhizome/pi, RScheme, Rhizome/pi, RScheme, Scheme48, Scheme-Scheme48, Scheme-to-C, SCM, Silk, to-C, SCM, Silk, SISC, SIOD, Sizzle, SISC, SIOD, Sizzle, Stalin, STKlos, SXM, Stalin, STKlos, SXM, Systas, TinyScheme, Systas, TinyScheme, VSCM. VSCM.

Page 10: Scheme A Language of Function JP Deshaies and Josh Calloway.

Implementation Details

SchemeScheme

Page 11: Scheme A Language of Function JP Deshaies and Josh Calloway.

Comments

Comments start with a semi-colon and Comments start with a semi-colon and extend to the end of a given lineextend to the end of a given line

Example:Example: ; this is a comment ; this is a comment

Page 12: Scheme A Language of Function JP Deshaies and Josh Calloway.

What Scheme Does Have:

Lexical scopingLexical scoping uniform evaluation rulesuniform evaluation rules uniform treatment of data typesuniform treatment of data types

Page 13: Scheme A Language of Function JP Deshaies and Josh Calloway.

What Scheme Does Not Have

uninitialized variablesuninitialized variables

explicit storage managementexplicit storage management

Page 14: Scheme A Language of Function JP Deshaies and Josh Calloway.

Interacting With Scheme

Read-Eval-Print LoopRead-Eval-Print Loop ‘‘Read’ an expression from the Read’ an expression from the

keyboardkeyboard ‘‘Eval’uate the expressionEval’uate the expression ‘‘Print’ result to the screenPrint’ result to the screen

Page 15: Scheme A Language of Function JP Deshaies and Josh Calloway.

Data Types

Characters: #\a #\A #\space #\newlineCharacters: #\a #\A #\space #\newline Strings: “this is a string”Strings: “this is a string” Arrays: (called vectors) #(1 2 “str” #\x 5)Arrays: (called vectors) #(1 2 “str” #\x 5) Lists: (1 2 3)Lists: (1 2 3) Numbers: 47 1/3 2.3 4.5e10 1+3iNumbers: 47 1/3 2.3 4.5e10 1+3i

Page 16: Scheme A Language of Function JP Deshaies and Josh Calloway.

More Data Types

Functions: (also called procedures)Functions: (also called procedures) Booleans: #t (true) #f (or () ) (false)Booleans: #t (true) #f (or () ) (false) Ports: (e.g. open files)Ports: (e.g. open files) Symbols: a-symbol foo a55 c$23*47!Symbols: a-symbol foo a55 c$23*47! Atoms: 5 “some string” Atoms: 5 “some string”

foo ; can be numbers, foo ; can be numbers, strings, or symbolsstrings, or symbols

Page 17: Scheme A Language of Function JP Deshaies and Josh Calloway.

General Data Type Info

A vectors contents can be any A vectors contents can be any combination of data objects (types)combination of data objects (types)

Symbols can include the characters: Symbols can include the characters: + - . * / < = > ! ? : $ % _ & ~ and ^+ - . * / < = > ! ? : $ % _ & ~ and ^

Symbols are case insensitiveSymbols are case insensitive Symbols are used for identifiers Symbols are used for identifiers

(variable names)(variable names)

Page 18: Scheme A Language of Function JP Deshaies and Josh Calloway.

More General Info

Variables can hold values of any typeVariables can hold values of any type Names refer to values (not required)Names refer to values (not required) An expression is one of more forms An expression is one of more forms

between parentheses: ex. (+ 2 3 ) between parentheses: ex. (+ 2 3 )

Page 19: Scheme A Language of Function JP Deshaies and Josh Calloway.

Expressions

Constant: ‘foo #\z 3 “a string”Constant: ‘foo #\z 3 “a string” Variable reference: foo george +Variable reference: foo george + Function creation: (lambda (z) (* z z z))Function creation: (lambda (z) (* z z z)) Function application: (cube 27)Function application: (cube 27) Conditional: (if (< x 3) sqrt 16)Conditional: (if (< x 3) sqrt 16) Assignment: (set! x 5)Assignment: (set! x 5) Sequence: (begin (write x) (write y) )Sequence: (begin (write x) (write y) )

Page 20: Scheme A Language of Function JP Deshaies and Josh Calloway.

More Expressions

Predicates: (string? str) Predicates: (string? str) ; end with ? ; end with ?

Side-effecting Functions: (set! x 5) Side-effecting Functions: (set! x 5) ; end with !; end with !

Page 21: Scheme A Language of Function JP Deshaies and Josh Calloway.

Scheme versus C

Scheme operates with prefix notationScheme operates with prefix notation

C operates with infix notationC operates with infix notation

Page 22: Scheme A Language of Function JP Deshaies and Josh Calloway.

Scheme versus C

(+ 2 3 4)(+ 2 3 4) (2 + 3 + 4)(2 + 3 + 4) (< low x high) (< low x high) ((low<x) && (x<high))((low<x) && (x<high)) (+ (* 2 3) (* 4 5) ) (( 2 * 3 ) + ( 4 * 5 ))(+ (* 2 3) (* 4 5) ) (( 2 * 3 ) + ( 4 * 5 )) ( f x y )( f x y ) f ( x, y) f ( x, y)

Scheme --> ( define (sq x) (* x x) )Scheme --> ( define (sq x) (* x x) ) C --> int sq ( int x ) { return ( x * x ) }C --> int sq ( int x ) { return ( x * x ) }

Page 23: Scheme A Language of Function JP Deshaies and Josh Calloway.

Defining Functions Functions are defined with the Functions are defined with the

keyword ‘define’:keyword ‘define’: Example:Example:

(define (add-one x) (+ x 1))(define (add-one x) (+ x 1)) ; to call this function:; to call this function: (add-one (6))(add-one (6)) ; output; output 77

Page 24: Scheme A Language of Function JP Deshaies and Josh Calloway.

Predicates

Conditional expressions used to Conditional expressions used to direct the ‘flow’ of programsdirect the ‘flow’ of programs

Example:Example: (if (> 7 6 ) 1 2)(if (> 7 6 ) 1 2) ; if 7 > 6, expression evaluates ; if 7 > 6, expression evaluates

to 1, else the expression to 1, else the expression evaluates to 2evaluates to 2

Page 25: Scheme A Language of Function JP Deshaies and Josh Calloway.

More On Predicates

General predicate expressions:General predicate expressions: Eq? ; used for telling whether Eq? ; used for telling whether

two objects are the same (ie. a two objects are the same (ie. a list is only eq? to itself)list is only eq? to itself)

Equal? ; used to test if two lists Equal? ; used to test if two lists have the same elements in the have the same elements in the same ordersame order

Page 26: Scheme A Language of Function JP Deshaies and Josh Calloway.

User Defined Predicates

Example:Example:

(define (positive? x) (>= x 0))(define (positive? x) (>= x 0))

; then call positive; then call positive

(positive? 5)(positive? 5)

;evaluates to:;evaluates to:

#t#t

Page 27: Scheme A Language of Function JP Deshaies and Josh Calloway.

Lists

A sequence of itemsA sequence of items Main data structure of schemeMain data structure of scheme Example:Example:

( define listA ( list (1 2 3) ) )( define listA ( list (1 2 3) ) )

Page 28: Scheme A Language of Function JP Deshaies and Josh Calloway.

List Functions

car ; evaluates to the first element of a listcar ; evaluates to the first element of a list cdr ; removes the first element of a list and cdr ; removes the first element of a list and

evaluates to the remainder of the listevaluates to the remainder of the list list? ; this predicate returns #t (true) is its list? ; this predicate returns #t (true) is its

parameter is a listparameter is a list cons ; used to add elements to a listcons ; used to add elements to a list

Page 29: Scheme A Language of Function JP Deshaies and Josh Calloway.

Recursion

A Scheme program to A Scheme program to compute factorials iscompute factorials is

(define (fact x)(define (fact x)

if (= x 0)if (= x 0)

11

(* x (fact (- (* x (fact (- x 1))))x 1))))

Page 30: Scheme A Language of Function JP Deshaies and Josh Calloway.

Also recursive

Here is one to do Here is one to do powerspowers

X^NX^N

(define (power x n)(define (power x n)

(if (= n 0)(if (= n 0)

11

(* x (power x (- n 1)))))(* x (power x (- n 1)))))

Page 31: Scheme A Language of Function JP Deshaies and Josh Calloway.

Macros

““just as functions are semantic just as functions are semantic abstractions over operations, macros abstractions over operations, macros are textual abstractions over syntax”are textual abstractions over syntax”

these can be used to extend the base these can be used to extend the base languagelanguage

Page 32: Scheme A Language of Function JP Deshaies and Josh Calloway.

Macro Example

define ( macking, “something’ )define ( macking, “something’ ) ; then type the token ‘macking’ followed ; then type the token ‘macking’ followed

by the non-token cool”by the non-token cool” macking cool”macking cool” ; this, in turn, forms the string token:; this, in turn, forms the string token: ““something cool” something cool”

Page 33: Scheme A Language of Function JP Deshaies and Josh Calloway.

Scheme Implementations

Commercial Implementations:Commercial Implementations: Chez Scheme, and MacSchemeChez Scheme, and MacScheme

Page 34: Scheme A Language of Function JP Deshaies and Josh Calloway.

More Scheme Implementations PC Scheme, Scheme->C, Scheme86, PC Scheme, Scheme->C, Scheme86,

EdScheme, Scheme311, TekScheme, EdScheme, Scheme311, TekScheme, STING, Skim, Scm, T, Gambit, FDU STING, Skim, Scm, T, Gambit, FDU Scheme, SIOS, PaiLisp, PMLisp, MIT Scheme, SIOS, PaiLisp, PMLisp, MIT Scheme, UMB Scheme, Scheme48, Scheme, UMB Scheme, Scheme48, OakLisp, MultiScheme, Mul-T, OakLisp, MultiScheme, Mul-T, XScheme, Fool’s Lisp, ELK Scheme, XScheme, Fool’s Lisp, ELK Scheme, Vincenns Scheme, MultiLisp, ;+ (more)Vincenns Scheme, MultiLisp, ;+ (more)

Page 35: Scheme A Language of Function JP Deshaies and Josh Calloway.

Contemporary Use Of Lisp/Scheme

Companies that use Lisp / Scheme: Companies that use Lisp / Scheme: DEC, TI, Tektronix, HP, NASA, and SunDEC, TI, Tektronix, HP, NASA, and Sun

Other companies using Lisp / Scheme: Other companies using Lisp / Scheme: Content-Integrity, Memetrics, and RiderContent-Integrity, Memetrics, and Rider

Page 36: Scheme A Language of Function JP Deshaies and Josh Calloway.

Scheme Resources Rebecca’s Scheme Resource: Rebecca’s Scheme Resource: http://www.http://www.

cscs..uncaunca..eduedu/~/~brucebruce/Fall00/csci431/lecture8/lecture8.html/Fall00/csci431/lecture8/lecture8.html

MIT Scheme Site: MIT Scheme Site: http://www.http://www.swissswiss..aiai..mitmit..eduedu/projects/scheme//projects/scheme/

Schemers Organization Site:Schemers Organization Site: http://www.schemers.org/http://www.schemers.org/

The Internet Scheme Repository Home The Internet Scheme Repository Home PagePage http://www.http://www.cscs..indianaindiana..eduedu/scheme-repository/home.html/scheme-repository/home.html

Page 37: Scheme A Language of Function JP Deshaies and Josh Calloway.

More Scheme Resources The Scheme Underground Site The Scheme Underground Site

http://www.http://www.aiai..mitmit..eduedu/projects//projects/susu//susu.html.html Scheme Faq Scheme Faq

http://www-2.http://www-2.cscs..cmucmu..eduedu/Groups/AI/html//Groups/AI/html/faqsfaqs//langlang/scheme/top.html/scheme/top.html

Scheme Tutorial Scheme Tutorial http://www.http://www.cscs.rice..rice.eduedu/CS/PLT/Teaching/Lectures/Released/Bo/CS/PLT/Teaching/Lectures/Released/Book/ok/


Recommended