(package shen-ruby [rb-to-l rb-to-v]

\ Convert a Ruby Enumerable to a Shen vector (define rb-to-l

Enum -> (reverse (rb.reduce Enum [] & (/. L X (cons X L))))
        where (rb.kind_of? Enum rb.#Enumerable)
X -> (error (make-string "'~A' is not a Ruby Enumerable" X)))

(systemf rb-to-l)

\ Convert a Ruby Enumerable to a Shen vector (define rb-to-v

Enum -> (let Array (rb.to_a Enum)
             Size (rb.size Array)
             Vector (vector Size)
             (rb-to-v-helper Array Vector Size))
X -> (error (make-string "'~A' is not a Ruby Enumerable" X)))

(systemf rb-to-v)

(define rb-to-v-helper

A V 0 -> V
A V Index -> (do (vector-> V Index (rb.<- A (- Index 1)))
                 (rb-to-v-helper A V (- Index 1))))

)