The procedure
square-list
takes a list of numbers as argument and returns a list of the squares of those numbers.> (square-list (list 1 2 3 4)) (1 4 9 16)
Here are two different definitions of
square-list
. Complete both of them by filling in the missing expressions:(define (square-list items) (if (null? items) nil (cons <??> <??>))) (define (square-list items) (map <??> <??>))
We're given two skeleton procedures here. The first procedure is similar to the recursive definition of
scale-list
in the Mapping over lists section of the book and is obviously the basis for a recursive procedure, while the second is analogous to the map
-based definition of scale-list
. The difference between scale-list
and square-list
is simply that the former scales each element of the list by some factor while the latter squares each element of the list. So our square-list
implementations will bear an uncanny resemblance to scale-list
, with just the scaling replaced with squaring.Assuming we've got
square
defined as before:
(define (square x) (* x x))...then we can produce the recursive implementation as follows:
(define (square-list items) (if (null? items) nil (cons (square (car items)) (square-list (cdr items)))))...which produces the results:
> (square-list (list 1 2 3 4 5 6 7 8 9 10)) (1 4 9 16 25 36 49 64 81 100)When it comes to the
map
-based version, we don't need to define a lambda-procedure as was necessary for scale-list
, as we already have a procedure defined that provides the functionality we require: square
. So we can define the map
-based version as follows:
(define (square-list items) (map square items))Of course this gives exactly the same results:
> (square-list (list 1 2 3 4 5 6 7 8 9 10)) (1 4 9 16 25 36 49 64 81 100)
No comments:
Post a Comment