I use the words "function", "operator", and "program" almost interchangeably. All three words mean "something that takes in some information, does some computation, and produces some information as a result".
The word "operator" tends to be used for built-in arithmetic functions like addition, subtraction, multiplication, division, square root, and comparison. The word "program" tends to be used for functions you or I have defined. The word "function" applies equally to both. Don't worry too much about this distinction.
For example, consider the familiar arithmetic operators
-", etc. from grade school:
in the algebraic expression
3 + 4, the
operator "+" operates on the two pieces of information "3"
and "4" and produces the result "7".
+, -, *, /all take two or more numbers and return a number
sqrttakes one number and returns a number
modulo(two names for the same operator) both take two integers and return an integer: they divide the first operand by the second, returning not the quotient but the remainder.
(sqrt (+ (* 3 (remainder 5 3)) (* 4 4)))
(sqrt 3 4)
sqrtfunction only accepts one parameter.
pihas the value 3.14159....
ehas the value 2.71828182....
define keyword is used in two common
ways: defining variables
falseare the two built-in boolean values.
<, >, =, <=, >=all take two or more numbers and return a boolean
eq?takes two objects (numbers, symbols, booleans, or anything else) and returns a boolean
and, oreach takes two or more booleans and returns a boolean
nottakes a boolean and returns a boolean
zero?, positive?, negative?all take a number and return a boolean.
(zero? x)is just another way of saying
(= x 0).
(positive? x)is just another way of saying
(> x 0).
(negative? x)is just another way of saying
(< x 0).
(or (<= price 10.00) (eq? my-symbol 'bluebird))
priceis less than or equal to 10.00; if so, it returns
true. If not, it then tests whether
my-symbolis the symbol
'bluebird; if so, it returns
(or 3 4)
orworks on booleans, not numbers
(< true false)
(+ 3 (< 4 5))
(+ 3 true), because the value of
(< 4 5)is
true. The second step fails because
+only works on numbers, not on a number and a boolean.
Scheme contains several conditional constructs, but the
only one we need in this course is
define-struct keyword allows you to add new
aggregate data types to the language.
emptyis a variable, not a function; its value is the empty list.
constakes an object and a list, and returns a new list with the specified object as its first element, and the specified list as the rest. In Beginner mode, it signals an error if the second parameter is not a list.
firsttakes a non-empty list and returns the first element. It signals an error message if it is given an empty list or anything other than a list.
resttakes a non-empty list and returns a list of everything but the first element. It signals an error message if it is given an empty list or anything other than a list.
empty?takes an object and returns a boolean indicating whether it is the empty list.
cons?takes an object and returns a boolean indicating whether it is a non-empty list.
(cons 'bluebird empty)
(define bird-list (cons 'bluebird (cons 'mallard (cons 'crow empty)))
bird-listto be a list of three symbols.
(cons 'bluebird (cons 'mallard (cons 'crow empty)))
(cons 'mallard (cons 'crow empty))
(first (rest bird-list))
(empty? (rest (rest (rest bird-list))))