Fundamentals of Computer Science 1 (CS151 2003S)
[Skip to Body]
Primary:
[Front Door]
[Current]
[Glance]
-
[EC]
[Honesty]
[Instructions]
[Links]
[Search]
[Syllabus]
Groupings:
[EBoards]
[Examples]
[Exams]
[Handouts]
[Homework]
[Labs]
[Lab Writeups]
[Outlines]
[Project]
[Readings]
[Reference]
ECA:
[About]
[Grades]
[Quizzes]
[Submit Work]
[Change Password]
[Reset Password]
Misc:
[Scheme Reference]
[Scheme Report]
[CS151 2003S Gum]
[CS151 2002F]
[CS151 History]
[SamR]
Back to Preconditions and Postconditions. On to Laboratory: Local Bindings.
Held: Tuesday, 25 February 2003
Summary:
Today we consider how to bind names to values using Scheme's let
expressions.
Related Pages:
Notes:
Overview:
let.let*.closest-to-zero
(define closest-to-zero
(lambda (lst)
(cond
; If there's only one element in the list, it's closest to zero
((null? (cdr lst)) (car lst))
; If the current element is closer to zero than the closest
; remaining thing, use that
((< (abs (car lst)) (abs (closest-to-zero (cdr lst))))
(car lst))
; Otherwise, use the thing in the remainder closest to zero
(else (closest-to-zero (cdr lst))))))
closest-to-zero, we
can make one by naming the result and using it twice. One
possibility is to use a helper procedure
(define closest-to-zero
(lambda (lst)
(cond
((null? (cdr lst)) (car lst))
(closer-to-zero (car lst) (closest-to-zero (cdr lst))))))
(define closer-to-zero
(lambda (guess1 guess2)
(if (< (abs guess1) (abs guess2)) guess1 guess2)))
(define closest-to-zero
(lambda (lst)
(cond
((null? (cdr lst)) (car lst))
"Compute (closest-to-zero (cdr lst)) and call it guess"
(if (< (abs (car lst)) (abs guess)) (car lst) guess))))
letlet.
let has the form
(let ((name1 exp1)
(name2 exp2)
...
(namen expn))
body)
let has the meaning:
let in a simple expression:
(define values (list 1 4 2 4 1 5 9))
(let ((largest (max values))
(smallest (min values)))
(/ (+ largest smallest) 2))
let within a procedure.
Here's a new version of closest-to-zero that uses
let.
(define closest-to-zero
(lambda (lst)
; If there's only one element in the list, it's closest to zero
(if (null? (cdr lst)) (car lst)
; Otherwise, find the remaining element closest to zero and
; call it guess
(let ((guess (closest-to-zero (cdr lst))))
; Choose the closer to zero of the first element and guess
(if (< (abs (car lst)) (abs guess)) (car lst) guess)))))
let*let* rather than let.
let* has the form
(let* ((name1 exp1)
(name2 exp2)
...
(namen expn))
body)
let* has the meaning:
;;; Procedure:
;;; exact-average
;;; Parameters:
;;; num1, an exact number
;;; num2, an exact number
;;; Purpose:
;;; Average the two numbers.
;;; Produces:
;;; average, an exact number
;;; Preconditions:
;;; num1 is an exact number [Verified]
;;; num2 is an exact number [Verified]
;;; Postconditions:
;;; Guess.
(define exact-average
(lambda (num1 num2)
(let ((verify?
(lambda (val) (and (number? val) (exact? val)))))
(cond
((not (verify? num1))
(error "exact-average" "first parameter is a non-number"))
((not (verify? num2))
(error "exact-average" "second parameter is a non-number"))
(else (/ (+ num1 num2) 2))))))
Thursday, 16 January 2003 [Samuel A. Rebelsky]
Back to Preconditions and Postconditions. On to Laboratory: Local Bindings.
[Skip to Body]
Primary:
[Front Door]
[Current]
[Glance]
-
[EC]
[Honesty]
[Instructions]
[Links]
[Search]
[Syllabus]
Groupings:
[EBoards]
[Examples]
[Exams]
[Handouts]
[Homework]
[Labs]
[Lab Writeups]
[Outlines]
[Project]
[Readings]
[Reference]
ECA:
[About]
[Grades]
[Quizzes]
[Submit Work]
[Change Password]
[Reset Password]
Misc:
[Scheme Reference]
[Scheme Report]
[CS151 2003S Gum]
[CS151 2002F]
[CS151 History]
[SamR]
Disclaimer:
I usually create these pages on the fly
, which means that I rarely
proofread them and they may contain bad grammar and incorrect details.
It also means that I tend to update them regularly (see the history for
more details). Feel free to contact me with any suggestions for changes.
This document was generated by
Siteweaver on Tue May 6 09:29:52 2003.
The source to the document was last modified on Thu Jan 16 13:45:58 2003.
This document may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2003S/Outlines/outline.22.html.
You may wish to
validate this document's HTML
;
;
Check with Bobby