Trajectory Tracking control of pendubot using the Takagi-Sugeno Fuzzy Scheme.pdf
Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional...
Transcript of Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional...
![Page 1: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/1.jpg)
Functional Programming in
Scheme
![Page 2: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/2.jpg)
Functional Programming
• Online textbook: http://www.htdp.org/
• Original functional language is LISP
– LISt Processing
– The list is the fundamental data structure
– Developed by John McCarthy in the 60’s
• Used for symbolic data processing
• Example apps: symbolic calculations in integral and differential
calculus, circuit design, logic, game playing, AI
• As we will see the syntax for the language is extremely simple
– Scheme
• Descendant of LISP
![Page 3: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/3.jpg)
Functional Languages
• “Pure” functional language– Computation viewed as a mathematical function mapping inputs to
outputs
– No notion of state, so no need for assignment statements (side effects)
– Iteration accomplished through recursion
• In practicality– LISP, Scheme, other functional languages also support iteration,
assignment, etc.
– We will cover some of these “impure” elements but emphasize the functional portion
• Equivalence– Functional languages equivalent to imperative
• Core subset of C can be implemented fairly straightforwardly in Scheme
• Scheme itself implemented in C
• Church-Turing Thesis
![Page 4: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/4.jpg)
Lambda Calculus
• Foundation of functional programming
• Developed by Alonzo Church, 1941
• A lambda expression defines – Function parameters
– Body
• Does NOT define a name; lambda is the nameless function. Below x defines a parameter for the unnamed function:
)( xxx
![Page 5: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/5.jpg)
Lambda Calculus
• Given a lambda expression
4)2)(( xxx
• Application of lambda expression
• Identity
• Constant 2:
)( xxx
)( xx
)2( x
![Page 6: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/6.jpg)
Lambda Calculus
• Any identifier is a lambda expression
• If M and N are lambda expressions, then the
application of M to N, (MN) is a lambda
expression
• An abstraction, written where x is
an identifier and M is a lambda expression,
is also a lambda expression
)( Mx
![Page 7: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/7.jpg)
Lambda Calculus
essionLambdaExprN
essionLambdaExprM
MidentMNidentessionLambdaExpr
)(|)(|
)))(((
)(
yyxx
xx
x
Examples
![Page 8: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/8.jpg)
Lambda CalculusFirst Class Citizens
• Functions are first class citizens
– Can be returned as a value
– Can be passed as an argument
– Can be put into a data structure as a value
– Can be the value of an expression
4)22())2)((( xyxxx
((λx·(λy·x+y)) 2 1) = ((λy·2+y) 1) = 3
![Page 9: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/9.jpg)
Lambda Calculus
Functional programming is essentially an applied lambda calculus with built in
- constant values
- functions
E.g. in Scheme, we have (* x x) for x*x instead of λx·x*x
![Page 10: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/10.jpg)
Functional Languages
• Two ways to evaluate expressions
• Eager Evaluation or Call by Value
– Evaluate all expressions ahead of time
– Irrespective of if it is needed or not
– May cause some runtime errors
• Example
(foo 1 (/ 1 x)) Problem; divide by 0
![Page 11: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/11.jpg)
Lambda Calculus
• Lazy Evaluation
– Evaluate all expressions only if needed
(foo 1 (/ 1 x)) ; (/ 1 x) not needed, so never eval’d
– Some evaluations may be duplicated
– Equivalent to call-by-name
– Allows some types of computations not possible in eager evaluation
• Example
– Infinite lists
• E.g,. Infinite stream of 1’s, integers, even numbers, etc.
– Replaces tail recursion with lazy evaluation call
– Possible in Scheme using (force/delay)
![Page 12: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/12.jpg)
Running Scheme for Class
• A version of Scheme called Racket
(formerly PLT/Dr Scheme) is available on
the Windows machines in the CS Lab
• Download: http://racket-lang.org/
• Unix, Mac versions also available if desired
![Page 13: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/13.jpg)
Racket
• You can type code directly into the
interpreter and Scheme will return with the
results:
![Page 14: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/14.jpg)
![Page 15: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/15.jpg)
Make sure right Language is selected
I like to use the
“Pretty Big”
language choice
![Page 16: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/16.jpg)
Racket – Loading Code
• You can open code saved in a file. Racket uses the
extension “.rkt” so consider the following file “factorial.rkt”
created with a text editor or saved from Racket:
(define factorial
(lambda (n)
(cond
((= n 1) 1)
(else (* n (factorial (- n 1))))
)
)
)
1: Open
2: Run
3: Invoke functions
![Page 17: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/17.jpg)
Functional Programming
Overview• Pure functional programming
– No implicit notion of state
– No need for assignment statement
• No side effect
– Looping
• No state variable
• Use Recursion
• Most functional programming languages have side effects, including Scheme
– Assignments
– Input/Output
![Page 18: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/18.jpg)
Scheme Programming Overview
- Refreshingly simple
- Syntax is learned in about 10 seconds
- Surprisingly powerful
- Recursion
- Functions as first class objects (can be value of an expression,
passed as an argument, put in a data structure)
- Implicit storage management (garbage collection)
- Lexical scoping
- Earlier LISPs did not do that (dynamic)
- Interpreter
- Compiled versions available too
![Page 19: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/19.jpg)
Expressions
• Syntax - Cambridge Prefix
– Parenthesized
– (* 3 4)
– (* (+ 2 3) 5)
– (f 3 4)
• In general:
– (functionName arg1 arg2 …)
• Everything is an expression
– Sometimes called s-expr (symbolic expr)
![Page 20: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/20.jpg)
Expression Evaluation
• Replace symbols with their bindings
• Constants evaluate to themselves
– 2, 44, #f
– No nil in Racket; use ‘()
• Nil = empty list, but Racket does have empty
• Lists are evaluated as function calls written
in Cambridge Prefix notation
(+ 2 3)
(* (+ 2 3) 5)
![Page 21: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/21.jpg)
Scheme Basics
• Atom
– Anything that can’t be decomposed further
• a string of characters beginning with a letter, number or special character other than ( or )
• e.g. 2, #t, #f, “hello”, foo, bar
• #t = true
• #f = false
• List
– A list of atoms or expressions enclosed in ()
– (), empty,(1 2 3), (x (2 3)), (()()())
![Page 22: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/22.jpg)
Scheme Basics
• S-expressions
– Atom or list
• () or empty
– Both atom and a list
• Length of a list
– Number at the top level
![Page 23: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/23.jpg)
Quote
• If we want to represent the literal list (a b c)
– Scheme will interpret this as apply the
arguments b and c to function a
• To represent the literal list use “quote”
– (quote x) x
– (quote (a b c)) (a b c)
• Shorthand: single quotation mark
‘a == (quote a)
‘(a b c) == (quote (a b c))
![Page 24: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/24.jpg)
Global Definitions
• Use define function
(define f 20)
(define evens ‘(0 2 4 6 8))
(define odds ‘(1 3 5 7 9))
(define color ‘red)
(define color blue) ; Error, blue undefined
(define num f) ; num = 20
(define num ‘f) ; symbol f
(define s “hello world”) ; String
![Page 25: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/25.jpg)
Lambda functions
• Anonymous functions
– (lambda (<formals>) <expression>)
– (lambda (x) (* x x))
– ((lambda (x) (* x x)) 5) 25
• Motivation
– Can create functions as needed
– Temporary functions : don’t have to have names
• Can not use recursion
![Page 26: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/26.jpg)
Named Functions
• Use define to bind a name to a lambda expression
(define square (lambda (x) (* x x)))
(square 5)
• Using lambda all the time gets tedious; alternate syntax:
(define (<function name> <formals>) <expression1> <expression2> …)
Last expression evaluated is the one returned
(define (square x) (* x x))
(square 5) 25
![Page 27: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/27.jpg)
Conditionals
(if <predicate> <expression1> <expresion2>)
- Return value is either expr1 or expr2
(cond (P1 E1)
(P2 E2)
(Pn En)
(else En+1))
- Returns whichever expression is evaluated
![Page 28: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/28.jpg)
Common Predicates
• Names of predicates end with ?
– Number? : checks if the argument is a number
– Symbol? : checks if the argument is a symbol
– Equal? : checks if the arguments are
structurally equal
– Null? : checks if the argument is empty
– Atom? : checks if the argument is an atom
• Appears undefined in Racket but can define
ourselves
– List? : checks if the argument is a list
![Page 29: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/29.jpg)
Conditional Examples
• (if (equal? 1 2) ‘x ‘y) ; y
• (if (equal? 2 2) ‘x ‘y) ; x
• (if (null? ‘()) 1 2) ; 1
• (cond
((equal? 1 2) 1)
((equal? 2 3) 2)
(else 3)) ; 3
• (cond
((number? ‘x) 1)
((null? ‘x) 2)
((list? ‘(a b c)) (+ 2 3)) ; 5
)
![Page 30: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/30.jpg)
Dissecting a List
• Car : returns the first argument
– (car ‘(2 3 4))
– (car ‘((2) 4 4))
– Defined only for non-null lists
• Cdr : (pronounced “could-er”) returns the rest of the list
– Racket: list must have at least one element
– Always returns a list
• (cdr ‘(2 3 4))
• (cdr ‘(3))
• (cdr ‘(((3))))
• Compose
• (car (cdr ‘(4 5 5)))
• (cdr (car ‘((3 4))))
![Page 31: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/31.jpg)
Shorthand
• (cadr x) = (car (cdr x))
• (cdar x) = (cdr (car x))
• (caar x) = (car (car x))
• (cddr x) = (cdr (cdr x))
• (cadar x) = (car (cdr (car x)))
• … etc… up to 4 levels deep in Racket
• (cddadr x) = ?
![Page 32: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/32.jpg)
Why Car and Cdr?
• Leftover notation from original
implementation of Lisp on an IBM 704
• CAR = Contents of Address part of Register
– Pointed to the first thing in the current list
• CDR = Contents of Decrement part of
Register
– Pointed to the rest of the list
![Page 33: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/33.jpg)
Building a list
• Cons
– Cons(truct) a new list from first and rest
– Takes two arguments
– Second should be a list
• If it is not, the result is a “dotted pair” which is typically considered a malformed list
– First may or may not be a list
– Result is always a list
![Page 34: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/34.jpg)
Building a list
X = 2 and Y = (3 4 5) : (cons x y)
(2 3 4 5)
X = () and Y =(a b c) : (cons x y)
(() a b c)
X = a and Y =() : (cons x y )
(a)
• What is
– (cons 'a (cons 'b (cons 'c '())))
– (cons (cons ‘a (cons ‘b ‘())) (cons ‘c ‘()))
![Page 35: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/35.jpg)
Numbers
• Regular arithmetic operators are available
+, -, *, /
– May take variable arguments
(+ 2 3 4), (* 4 5 9 11)
• (/ 9 2) 4.5 ; (quotient 9 2) 4
• Regular comparison operators are available
< > <= >= =
• E.g. (= 5 (+ 3 2)) #t
= only works on numbers, otherwise use
equal?
![Page 36: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/36.jpg)
Example
• Sum all numbers in a list
(define (sumall list)
(cond
((null? list) 0)
(else (+ (car list) (sumall (cdr list))))))
Sample invocation: (sumall ‘(3 45 1))
![Page 37: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/37.jpg)
Example
• Make a list of n identical values
(define (makelist n value)
(cond
((= n 0) '())
(else
(cons value (makelist (- n 1) value))
)
)
)
In longer programs, careful matching parenthesis.
![Page 38: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/38.jpg)
Example
• Determining if an item is a member of a list
(define (member? item list)
(cond ((null? list) #f)
((equal? (car list) item) #t)
(else (member? item (cdr list)))
)
)
Scheme already has a built-in (member item list) function
that returns the list after a match is found
![Page 39: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/39.jpg)
Example
• Remove duplicates from a list
(define (remove-duplicates list)
(cond ((null? list) '())
((member? (car list) (cdr list))
(remove-duplicates (cdr list)))
(else
(cons (car list) (remove-duplicates (cdr list))))
)
)
![Page 40: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/40.jpg)
Alternate List Constructors
• Sometimes the cons configuration of combining an element and a list is awkward.
• In that case the functions list and append may be what you need.
• list merges several elements into one big list while append merges several lists together into a single one.
• Like cons, both append and list allocate memory to construct their results.
![Page 41: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/41.jpg)
Alternate List Constructors
list
• Takes any number of values of any type and binds them all together in a new list. The number of arguments to list will be the number of elements in the new list.
Example:
(list 1 3 5 (+ 4 3) '(/ 18 2)) ->
(1 3 5 7 (/ 18 2))
(list '() '() '()) ->
(() () ())
![Page 42: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/42.jpg)
Alternate List Constructors
append
• Takes any number of lists and merges their elements together into a new list. The length of the resulting list will be the sum of the lengths of the given lists.
• Example:
(append '(1 2) '(3 4) '(5 6 7)) ->
(1 2 3 4 5 6 7)
(append '(1 2) '((1 2)) '((1) (2)))->
(1 2 (1 2) (1) (2))
![Page 43: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/43.jpg)
Boolean Functions
Scheme includes the usual Boolean operators
as well as many built-in predicates which
return a truth value to test some condition:
![Page 44: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/44.jpg)
Boolean Functions
and
• Takes any number of expressions and returns false if and only if one or more of the arguments is false. As with most languages, Scheme promises to short circuit: the evaluation stops as soon as it finds a false expression.
• Example:
(and (< (expt 2 10) 1000) (string<? "mellow" "fellow")) ->
#f
(and (> (expt 2 10) 1000) (string<? "mellow" "fellow")) ->
False
(and (> (expt 2 10) 1000) (string>? "mellow" "fellow")) ->
true
(and)
#t
![Page 45: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/45.jpg)
Boolean Functions
or
• Takes any number of expressions and returns false if and only if every single one of its arguments evaluates to false as well. or also short circuits and comes back with an answer as soon as if figures it out.
• Examples:
(or (< (sqrt (* 2 2 2)) 3) (string>=? "james" "bond")) ->
#t
(or (< (sqrt (* 2 2 2)) 3) (string<=? "james" "bond")) ->
#t
(or (> (sqrt (* 2 2 2)) 3) (string<=? "james" "bond"))->
false
(or) ->
#f
![Page 46: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/46.jpg)
Boolean Functions
Not
• Generates the logical inverse of its argument. Real shocker.
• Example:
(not (string=? "abcde" "abcde"))->
#f
(string=? "abcde" "abcde")->
#t
(not (string=? "abcde" "abcde")) ->
#f
(not (not (string=? "abcde" "abcde")))->
#t
(not (or (> 3 4) (< 8 9)))->
#f
![Page 47: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/47.jpg)
Boolean Functionslist?
• Returns true if and only if its argument evaluates to a list.
• Example:
(list? '(1 2 3))
#t
(list? '())
#t
(list? '((1 2) "hello" ("gorgeous")))
#t
(list? 11)
#f
(list? 11/3)
#f
(list? 4.3+4.3i)
#f
(list? "curious george")
#f
![Page 48: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/48.jpg)
Boolean Functions• string? Returns true if and only if its argument evaluates to a string.
• char? Returns true if and only if its argument evaluates to a character.
• number? Returns true if and only if its argument evaluates to some
type of number.
• integer? Returns true if and only if its argument evaluates to an integer.
• rational? Returns true if and only if its argument evaluates to an integer
or a rational.
• real? Returns true if and only if its argument evaluates to a real
number, be it integral, rational, or floating float.
• complex? Returns true if and only if its argument evaluates to some
form of a number. Since the domain of complex numbers includes the
domain of all reals, which includes the domain of all rationals, which
includes the domain of all integers, pretty much anything that passes a
number? test also passes the complex? test.
![Page 49: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/49.jpg)
Boolean Functions• boolean?
• Returns true if and only if its argument evaluates to a bonafide
Boolean result (and not just one that can be interpreted as a Boolean.)
• Example
(boolean? #t)
#t
(boolean? #\t)
#f
(boolean? "true")
#f
(boolean? (integer? 99.8877665))
#t
(boolean? (string<=? "candy" "cane"))
#t
![Page 50: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/50.jpg)
Boolean Functions• symbol?
• Returns true if and only if its argument evaluates to a symbol.
• Example
(symbol? "stringy")
#f
(symbol? 'stringy)
#t
(symbol? 'car)
#t
(symbol? car)
#f
• Note that 'car, because it’s quoted, evaluates to itself. But car isn’t
quote, so it evaluates to the code it’s a symbol for.
![Page 51: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/51.jpg)
Boolean Functions• procedure?
• Returns true if and only if its argument evaluates to a procedure, which
in layman’s terms means: if and only if it’s the name of an actual
function.
• Example
(procedure? 'car)
#f
(procedure? car)
#t
(procedure? append)
#t
(procedure? procedure?)
#t
(procedure? "Hey, I'm a procedure!")
#f
![Page 52: Functional Programming in Schemeinfo.psu.edu.sa/psu/cis/biq/cs320/slides/scheme.pdf · Functional Languages • “Pure” functional language – Computation viewed as a mathematical](https://reader035.fdocuments.net/reader035/viewer/2022062602/5ed8c8696714ca7f47688eda/html5/thumbnails/52.jpg)
Boolean Functions• null? Returns true if and only if its argument evaluates to the empty
list.
• zero? Returns true if a number is logically equivalent to zero.
• positive? Returns true if a real number is greater than zero. Chokes on
complex numbers, unless its imaginary part is zero.
• negative? Returns true if a real number is less than zero. Chokes on
complex numbers, unless its imaginary part is zero.
• odd?, even? Returns true if and only if the argument evaluates to an
integer and the result if odd, even, respectively.