[plt-scheme] for-each in vector (macro)
Here are two more ways to do it (untested):
#lang scheme
(for ([a #(1 2 3)] [b #(1 2 3)])
(display (+ a b)))
(require srfi/43)
(vector-for-each (lambda (i a b) (display (+ a b))) #(1 2 3) #(1 2 3))
2009/4/26 Matthias Felleisen <matthias at ccs.neu.edu>:
>
> Here are two solutions:
>
> #lang scheme
>
> ;; macros
> (define-syntax for-each-vector
> (syntax-rules ()
> ((for-each-vector proc vec ...)
> (let ((len (min (vector-length vec) ...)))
> (do ((index 0 (+ index 1)))
> ((= index len))
> (proc (vector-ref vec index) ...))))))
>
> (for-each-vector (lambda (a b) (display (+ a b))) #( 1 2 3) #( 1 2 3))
>
> ;; functional, preferred
>
> ;; for-each-vector2 (All (A C ...) ((C ... -> A) (Vectorof C) ... -> A))
> (define (for-each-vector2 p . vec)
> (for ((i (in-range (apply min (map vector-length vec)))))
> (apply p (map (lambda (v) (vector-ref v i)) vec))))
>
> (for-each-vector2 (lambda (a b) (display (+ a b))) #( 1 2 3) #( 1 2 3))
>
> -- Matthias
>
>
>
>
> On Apr 26, 2009, at 10:50 AM, François Michaudon wrote:
>
>> Hello,
>> (define-syntax for-each-vector
>> (syntax-rules ()
>> ((for-each-vector proc vec) (let ((len (vector-length vec)))
>> (do ((index 0 (+ index 1)))
>> ((= index len))
>> (proc (vector-ref vec index)))))))
>> Now examples:
>> (for-each-vector (lambda (a) (display a)) #( 1 2 3))
>>
>> >>> 123 ok
>>
>> (for-each-vector (lambda (a b) (display (+ a b))) #( 1 2 3) #( 1 2 3))
>>
>> >>> error syntax
>>
>> I try to put some ... in my define doesn't work.
>> How to use multiple args in lambda ?
>> _________________________________________________
>> For list-related administrative tasks:
>> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
--
sam th
samth at ccs.neu.edu