[racket] Rookie Question on Functional Languages
On 12/09/2010 11:51 AM, Luke Jordan wrote:
> Here's a rookie question that stems from HtDP 29.3.2.
>
> The idea is to test an expression a number of times while timing it and
> compare to another version of the same function. The expression finds a
> route in a vector (graph) from node 0 to node 4. The way I would do
> this in C/Python is with a while loop, while the counter is not zero
> execute the expression (ignore return value), and wrap it in the timer.
> In Racket I came up with:
>
> (time (for-each
> (lambda (dest) (find-route 0 dest Graph))
> (make-list 1000 4)))
>
> It seems unnecessarily tricky, but I couldn't think of a better way. Am
> I missing a piece? Does it only seem tricky because Racket is my first
> functional language.
To the student of functional programming:
You're right, it is unnecessary. You're using a list because you know
someone has already provided "loop" functions for lists. But you just
want to repeat an action N times---that's a natural number. Refresh
yourself on Section 11 (Natural Numbers) and design this function:
;; do-times : Nat (-> Void) -> Void
;; Applies the given thunk N times.
To the aspiring Racketeer:
Racket has loop support for natural numbers, just not as a single
function like 'for-each'. Look at 'for' and 'in-range'.
Ryan