[an error occurred while processing this directive]

Class 3 Notes

Lecture Slides, Suitable For Printing
Two especially useful DrScheme commands:

Notes and Questions

Why did Alan Perlis say, "A Lisp programmer knows the value of everything, but the cost of nothing."? (Note: Scheme is a dialect of Lisp)





Defining Procedures
Define a procedure that takes three inputs, the first two inputs are procedures, and the third input is a number. The output of the procedure should be the maximum value produced by applying either the first or second input procedure to the input number.





Expression ::= PrimitiveExpression
PrimitiveExpression ::= Number | #t | #f | Primitive Procedure

Evaluation Rule 1: Primitives. If the expression is a primitive, it evaluates to __________________________________________.

Expression ::= NameExpression
NameExpression ::= Name
Evaluation Rule 2: Names. If the expression is a name, it evaluates to __________________________________________.
Expression ::= ApplicationExpression
ApplicationExpression ::= (Expression MoreExpressions)
MoreExpressions ::=
MoreExpressions ::= Expression MoreExpressions
Evaluation Rule 3: Application. If the expression is an application:
    (a) Evaluate all the subexpressions (in any order)
    (b) Apply the value of the first subexpression to the values of all the other subexpressions.

Application Rule 1: Primitives. If the procedure to apply is a primitive, __________________.

Application Rule 2: Constructed Procedures. If the procedure is a constructed procedure, ___________________ the body of the procedure with each formal parameter replaced by the corresponding actual argument expression value.

Expression ::= ProcedureExpression
ProcedureExpression ::= (lambda (Parameters) Expression)
Parameters ::=
Parameters ::= Name Parameters
Evaluation Rule 4: Lambda. Lambda expressions evaluate to a procedure that takes the given parameters and has the expression as its body. (Do not do anything until it is applied.)
Expression ::= IfExpression
IfExpression ::= (if ExpressionPredicate ExpressionConsequent ExpressionAlternate)
Evaluation Rule 5: If. To evaluate an if expression, (a) evaluate the ___________________; then, (b) if the value of the predicate expression is ___________ then the value of the if expression is the value of the alternate expression; otherwise, the value of the if expression is the value of the _____________________________________.
Tough Questions
Show how the Rules of Evaluation would evaluate (cube 5) where cube is defined by:
(define cube (lambda (x) (* x x x)))
You will need more space for this, but it is worth doing. (For an exam, say. Hint, wink, nudge.) Of course, you know the final value, but the important thing is to understand how following the Scheme evaluation rules steps will produce that value. You should be confident that you can determine the value of any Scheme expression just by following the evaluation rules systematically.

Evaluation Rule 3a does not say in what order the subexpressions should be evaluated in. For example, we could evaluate them left to right, or right to left, or in any other order. This is like the MIU-system Rule 3 that does not say which occurance of III should be replaced. Does it ever matter in which order the subexpressions of an application are evaluated? (Tough question, but try to think of a Scheme expression where it would make a difference.)

[an error occurred while processing this directive]