I was playing around with ProjectEuler #11 and found a lisp solution and adapted it to Racket.  Part of the solution had code like the following to find products of values in a 20x20 vector.<div><br><div><div>(define (prod-of-vec-lines-of-length-4 v ix iy dx dy)</div>
<div>  (do ([p 1 (* p (if (in-vector? x y 20 20) (vector-ref v (+ (* 20 y) x)) 0))] </div><div>       [x ix (+ x dx)] </div><div>       [y iy (+ y dy)] </div><div>       [c 0 (add1 c)]) </div><div>    ((= c 4) p)))</div></div>
</div><div><br></div><div>I realize I&#39;ve hard-coded this in a very ugly fashion to 20x20 vectors. </div><div><br></div><div>My questions are:</div><div><br></div><div>1) Is there a more Racket-idiomatic way to write the &quot;do&quot; loop above?</div>
<div>2) If I wanted to use srfi/25 to do this in a nicer fashion, how would I read in the array? - I liked being able to read in the vector with simply (read in) - is there a simply , one-line way to convert a vector to an array (make-array (shape 0 20 0 20) vec) puts the entire 400 element vector into the first element of the array!</div>
<div><br></div><div>Thanks,</div><div>-joe</div>