Isn't that just the way of it...
I mentioned in the previous entry that I was missing Python's List Comprehensions. Well, I've gotten a little closer to having them. For some reason, LispMe doesn't come with a zip method, and you can only get map by importing a "Standard Library" memo. So, I had to write my own version of zip, and here it is, for anyone else who might find it useful.
1 2 3 4 |
(define (zip s1 s2) (if (or (null? s1) (null? s2)) '() (cons (list (car s1) (car s2)) (z (cdr s1) (cdr s2))))) |
Along with my halfway function, redefined to be (define (halfway x) (/ (+ (car x) (cadr x)) 2)), I can now write (map halfway (zip current-point next-point)) to get the point halfway between where I am, and where I am going to.
I also came to another realization. I was planning on defining a current-point, and using set! to update it to the new halfway point, but when I think about it, I don't really care what the current point is at any time other than processing, so there's no particular need to set it, and instead I should just pass it around as a parameter, making my iter function (and I just made up the name "iter function", based on the <a href= "http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%_sec_1.1.7"
sqrt-iter function in "Structure and Interpretation of Computer Programs") look something like this:
1 2 3 4 5 6 |
(define (triangle-iter start num-iters) (if (positive? num-iters) (begin (draw-point start) (triangle-iter (map halfway (zip current-point next-point)) (- num-iters 1))))) |
Does that look appropriately Scheme-ish, do you think?