Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define-syntax make-multi-vector
- (syntax-rules ()
- ((_ s)
- (let (( v (make-vector (+ 2 (apply * s )))))
- (begin
- (vector-set! v 0 'multiv)
- (vector-set! v 1 s )
- v)))
- ((_ s f)
- (let (( v (make-vector (+ 2 (apply * s )))))
- (begin
- (vector-fill! v f)
- (vector-set! v 0 'multiv )
- (vector-set! v 1 s )
- v)))))
- (define (multi-vector? v)
- (equal? (vector-ref v 0) 'multiv))
- (define (multi-vector-ref v y)
- (define (main x l s)
- (if (null? l)
- (vector-ref v (+ x 2))
- (main (+ x (* (/ (apply * s) (car s)) (car l))) (cdr l) (cdr s))))
- (main 0 y (vector-ref v 1)))
- (define (multi-vector-set! v y p)
- (define (main x l s)
- (if (null? l)
- (vector-set! v (+ x 2) p)
- (main (+ x (* (/ (apply * s) (car s)) (car l))) (cdr l) (cdr s))))
- (main 0 y (vector-ref v 1)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement