[racket] Tabulate from build-list
Here is how I suggest our freshmen to find this function:
;; tabulate : (x -> y) Nat -> (listof y) ;; <------- MF: not fix of signature
;; to tabulate f between n
;; and 0 (inclusive) in a list
(check-expect (tabulate (lambda (x) x) 3) '(3 2 1 0))
(define (tabulate.v0 f n)
(cond
[(= n 0) (list (f 0))]
[else
(cons (f n)
(tabulate f (sub1 n)))]))
;; Using build-list
;; build-list : N (N -> X) -> (listof X)
;; to construct (list (f 0) ... (f (- n 1)))
(define (tabulate f n)
(local (;; Nat -> Y ;; <-------------- MF: you know you want build-list, design (!) the 'loop' function now
(define (g i) ... f n i ...)) ;; <---- this is the data that's available
(build-list (+ n 1) g)))
Also see '2e'.
On Jul 30, 2012, at 4:10 PM, Sean Kemplay wrote:
> Hello,
>
> I am looking at the exercise from htdp 1e on building the tabulate
> function from build-list.
>
> Would I be on the right track that I need to create a function to
> reverse the result of (build-list (+ n 1) f) to do this?
>
> the function this is to emulate -
>
> ;; tabulate : (x -> y) x -> (listof y)
> ;; to tabulate f between n
> ;; and 0 (inclusive) in a list
> (define (tabulate f n)
> (cond
> [(= n 0) (list (f 0))]
> [else
> (cons (f n)
> (tabulate f (sub1 n)))]))
>
> Using build-list
> ;; build-list : N (N -> X) -> (listof X)
> ;; to construct (list (f 0) ... (f (- n 1)))
> (define (build-list n f) ...)
>
> Regards,
> Sean
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users