# [racket] Constructors for sequences

>* (sequence-constructor (list 1 2 3)) = list
*>* (sequence-constructor (vector 1 2 3)) = vector
*>* etc
*>*
*>* I'd like to use it for a declare-mappable macro that extends functions
*>* of one argument
*>* to map over sequences. As in (sin (list 1 2 3)) = (list (sin 1) (sin
*>* 2) (sin 3)).
*>*
*
I think you are seeking a distributive mapping of two functions f and g
;(f (g . rest)) -> g (f(arg) . f(arg2).....)
So (I think) the evaluative order of racket becomes the impediment, and not the
type of the sequence
try this:
(require mzlib/defmacro)
(define-macro (distribute . (f g . rest))
`(,g ,@(map (λ (x) `(,f ,x)) rest)))
>* (distribute sin list 1 2 3)
*(0.8414709848078965 0.9092974268256817 0.1411200080598672)
>* (distribute sin vector 1 2 3)
*#(0.8414709848078965 0.9092974268256817 0.1411200080598672)
>*
*