Technically, picrin's array is implemented as a ring-buffer, effective double-ended queue data structure (deque) that can operate pushing and poping from both of front and back in constant time. In addition to the deque interface, array provides standard sequence interface similar to functions specified by R7RS.
-**(make-array [capacity])**
Returns a newly allocated array object. If capacity is given, internal data chunk of the array object will be initialized by capacity size.
-**(array . objs)**
Returns an array initialized with objs.
-**(array? . obj)**
Returns #t if obj is an array.
-**(array-length ary)**
Returns the length of ary.
-**(array-ref ary i)**
Like ``list-ref``, return the object pointed by the index i.
-**(array-set! ary i obj)**
Like ``list-set!``, substitutes the object pointed by the index i with given obj.
-**(array-push! ary obj)**
Adds obj to the end of ary.
-**(array-pop! ary)**
Removes the last element of ary, and returns it.
-**(array-unshift! ary obj)**
Adds obj to the front of ary.
-**(array-shift! ary)**
Removes the first element of ary, and returns it.
-**(array-map proc ary)**
Performs mapping operation on ary.
-**(array-for-each proc ary)**
Performs mapping operation on ary, but discards the result.
Look up dictionary dict for a value associated with key. If dict has a slot for key `key`, the value stored in the slot is returned. Otherwise `#undefined` is returned.
If there is no value already associated with key, this function newly creates a binding of key with obj. Otherwise, updates the existing binding with given obj.
If obj is `#undefined`, this procedure behaves like a deleter: it will remove the key/value slot with the name `key` from the dictionary. When no slot is associated with `key`, it will do nothing.