Course Grades Email
Welcome
Policies Grades Inc Intgrty Preface Part I Chap 1 Chap 2 Chap 3 XEmacs Chap 4 Chap 5 Chap 6 Chap 7 Chap 8 Chap 9 Part II Chap 10 Chap 11 Chap 12 Chap 13 Chap 14 Chap 15 Chap 16 Chap 17 Chap 18 Chap 19 Chap 20 Chap 21 Chap 22 Chap 23 Part III Chap 24 Chap 25 Chap 26 Chap 27 Chap 28 Chap 29 Chap 30 Chap 31 Chap 32 | CHAPTER 28: ITERATION - Corrections
-
- Page 207, line 10: Change 12))) to 12)).
- Page 207, line 17: Change forms to statements.
- Page 207, line 18: Change form to statement.
- Page 210, line -1: Change list:dolist to lisp:dolist.
- Notes
-
- Read Chapter 28
- As I say in the footnote on page 204, ANSI Common Lisp has a new, very involved
loop , but the simple loop discussed in this chapter still works as I describe it. - The one branch conditionals
when and unless are discussed on page 205. You should immediately start using them whenever they are appropriate. - In Exercise 28.1, you are asked to define a function that returns a list of 100 elements. If you just do this and test it, Lisp will not print the entire list for you. There are several global variables that control various aspects of printing, two of which are:
- If the value of
top-level:*print-length* is an integer n, only n elements of a list will be printed, followed by "... "; if its value is NIL , all elements of lists will be printed. The default value is 10. - If the value of
top-level:*print-level* is an integer n, trees will be printed only to a depth of n followed by "# "; if its value is NIL , trees will be printed to their full depth. The default value is 5. You may change these variables with setf . The reason not to make them both NIL is that, through various errors, it is possible to construct infinite long lists and infinitely deep trees, and you don't want to make Lisp try to print them fully. - Make a file named
ch28.cl . Paste the following into it. Replace the question marks with your answers, and submit the file. ----------------------- cut here ----------------------- ;;; Answers To Chapter 28 Exercises ;;; by ??? ;;; Username: ??? (defpackage ch28) (in-package ch28) (setf top-level:*print-length* 125) ;;; 28.1 The definition of build-list is ??? ;;; 28.2 (supplied) (defun reverse1 (l) "Returns a copy of the list L with the order of members reversed." (check-type l list) (reverse2 l '())) (defun reverse2 (l1 l2) "Returns a list consisting of the members of L1 in reverse order followed by the members of L2 in original order." (check-type l1 list) (check-type l2 list) (if (null l1) l2 (reverse2 (rest l1) (cons (first l1) l2)))) ;;; 28.3 (supplied) (defun reverse3 (l) "Returns a copy of the list L with the order of members reversed." (check-type l list) (let (l2) (loop (when (null l) (return l2)) (push (pop l) l2)))) (defun reverse4 (l) "Returns a copy of the list L with the order of members reversed." (check-type l list) (let (l2) (mapc #'(lambda (e) (push e l2)) l) l2)) (defun reverse5 (l) "Returns a copy of the list L with the order of members reversed." (check-type l list) (let (l2) (dolist (e l l2) (push e l2)))) ;;; 28.4 Note that you should not quote the argument of time. That ;;; is, to time reverse1, you should evaluate ;;; (time (reverse1 longlist)) ;;; You should also make longlist long enough to see interesting ;;; differences in the running times of the 5 versions of reverse. ;;; 100 might not be long enough. ;;; What length did you use? ??? ;;; The 5 timing tests are shown here: ??? ;;; 28.5 The form assigning the variable reverses the value requested ;;; in the text, the dolist form, and its results are shown here: ??? ??? ??? ;;; 28.6 The form mapping compile over the five functions (reverse1, ;;; reverse2, reverse3, reverse4, and reverse5) and the value of ;;; that mapping is shown here: ??? ??? ;;; 28.7 The timing test of the compiled functions is shown here: ??? ;;; The following table shows the results of the two timing tests. ;;; (Fill in each "time" column with the appropriate number of "cpu ;;; time (non-gc) msecs", and fill in each "order" column with ;;; integers 1 - 5, 1 for the fastest function, ;;; 5 for the slowest function. In case of ties assign the same integer ;;; to all tied functions.) ;;; ;;; before compile after compile ;;; time order time order ;;; reverse1 ??? ??? ??? ??? ;;; reverse3 ??? ??? ??? ??? ;;; reverse4 ??? ??? ??? ??? ;;; reverse5 ??? ??? ??? ??? ;;; lisp:reverse ??? ??? ??? ??? ;;; 28.17 Could you find a way to make the form True other than by putting a form that contains s itself in the blank? If so, how? ??? ----------------------- cut here ----------------------- - When you have submitted correct exercises through this chapter, you will have earned a grade of A-.
|