Wiki
Download
Manual
Eggs
API
Tests
Bugs
show
edit
history
You can edit this page using
wiki syntax
for markup.
Article contents:
== Outdated egg! This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for [[/eggref/5/srfi-4-utils|the CHICKEN 5 version of this egg]], if it exists. If it does not exist, there may be equivalent functionality provided by another egg; have a look at the [[https://wiki.call-cc.org/chicken-projects/egg-index-5.html|egg index]]. Otherwise, please consider porting this egg to the current version of CHICKEN. [[tags:egg]] == srfi-4-utils Utility functions for SRFI-4 vectors. [[toc:]] == Usage (require-extension srfi-4-utils) == Documentation {{srfi-4-utils}} contains a set of convenience procedures for [[http://srfi.schemers.org/srfi-4/srfi-4.html|SRFI-4]] vectors: {{fold}}, {{map}}, {{quick-sort!}}, {{merge!}}, {{merge-sort!}}. === Procedures <procedure>s8vector-fold :: F * X0 * V [* V1 ... VN] -> XN</procedure><br> <procedure>u8vector-fold :: F * X0 * V [* V1 ... VN] -> XN</procedure><br> <procedure>s16vector-fold :: F * X0 * V [* V1 ... VN] -> XN</procedure><br> <procedure>u16vector-fold :: F * X0 * V [* V1 ... VN] -> XN</procedure><br> <procedure>s32vector-fold :: F * X0 * V [* V1 ... VN] -> XN</procedure><br> <procedure>u32vector-fold :: F * X0 * V [* V1 ... VN] -> XN</procedure><br> <procedure>f32vector-fold :: F * X0 * V [* V1 ... VN] -> XN</procedure><br> <procedure>f64vector-fold :: F * X0 * V [* V1 ... VN] -> XN</procedure> where {{F :: V(I) [ * V1(I) ... VN(I)] * AX -> AX}} <procedure>s8vector-map :: F * V [ * V1 ... VN] -> V</procedure><br> <procedure>u8vector-map :: F * V [ * V1 ... VN] -> V</procedure><br> <procedure>s16vector-map :: F * V [ * V1 ... VN] -> V</procedure><br> <procedure>u16vector-map :: F * V [ * V1 ... VN] -> V</procedure><br> <procedure>s32vector-map :: F * V [ * V1 ... VN] -> V</procedure><br> <procedure>u32vector-map :: F * V [ * V1 ... VN] -> V</procedure><br> <procedure>f32vector-map :: F * V [ * V1 ... VN] -> V</procedure><br> <procedure>f64vector-map :: F * V [ * V1 ... VN] -> V</procedure> <procedure>s8vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN</procedure><br> <procedure>u8vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN</procedure><br> <procedure>s16vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN</procedure><br> <procedure>u16vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN</procedure><br> <procedure>s32vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN</procedure><br> <procedure>u32vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN</procedure><br> <procedure>f32vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN</procedure><br> <procedure>f64vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN</procedure> where {{F :: I * V(I) [ * V1(I) ... VN(I)] * AX -> AX}} <procedure>s8vector-mapi :: F * V [* V1 ... VN] -> V</procedure><br> <procedure>u8vector-mapi :: F * V [* V1 ... VN] -> V</procedure><br> <procedure>s16vector-mapi :: F * V [* V1 ... VN] -> V</procedure><br> <procedure>u16vector-mapi :: F * V [* V1 ... VN] -> V</procedure><br> <procedure>s32vector-mapi :: F * V [* V1 ... VN] -> V</procedure><br> <procedure>u32vector-mapi :: F * V [* V1 ... VN] -> V</procedure><br> <procedure>f32ector-mapi :: F * V [* V1 ... VN] -> V</procedure><br> <procedure>f64vector-mapi :: F * V [* V1 ... VN] -> V</procedure> where {{F :: I * V(I) [* V1(I) ... VN(I)] -> V}} <procedure>s8vector-blit! :: VFROM * I * END * VTO * J] -> V</procedure><br> <procedure>u8vector-blit! :: VFROM * I * END * VTO * J] -> V</procedure><br> <procedure>s16vector-blit! :: VFROM * I * END * VTO * J] -> V</procedure><br> <procedure>u16vector-blit! :: VFROM * I * END * VTO * J] -> V</procedure><br> <procedure>s32vector-blit! :: VFROM * I * END * VTO * J] -> V</procedure><br> <procedure>u32vector-blit! :: VFROM * I * END * VTO * J] -> V</procedure><br> <procedure>f32vector-blit! :: VFROM * I * END * VTO * J] -> V</procedure><br> <procedure>f64vector-blit! :: VFROM * I * END * VTO * J] -> V</procedure><br> Copies subvector {{VFROM[I,END)}} into {{VTO[J,J+(END-I))}}. <procedure>s8vector-merge! :: ELT< * VA * P * Q * R * VB * N -> VB</procedure><br> <procedure>u8vector-merge! :: ELT< * VA * P * Q * R * VB * N -> VB</procedure><br> <procedure>s16vector-merge! :: ELT< * VA * P * Q * R * VB * N -> VB</procedure><br> <procedure>u16vector-merge! :: ELT< * VA * P * Q * R * VB * N -> VB</procedure><br> <procedure>s32vector-merge! :: ELT< * VA * P * Q * R * VB * N -> VB</procedure><br> <procedure>u32vector-merge! :: ELT< * VA * P * Q * R * VB * N -> VB</procedure><br> <procedure>f32vector-merge! :: ELT< * VA * P * Q * R * VB * N -> VB</procedure><br> <procedure>f64vector-merge! :: ELT< * VA * P * Q * R * VB * N -> VB</procedure><br> Given vector VA and indices P, Q, R such that P < Q < R, merges subvector {{VA[P,Q)}} and subvector {{A[Q,R)}} into vector {{B[N,N+(R-P))}}. The comparison function {{ELT<}} must be of type {{ELT< :: i1 * V(i1) * i2 * V(i2) -> boolean}}. <procedure>s8vector-quick-sort! :: ELT< * V -> V</procedure><br> <procedure>u8vector-quick-sort! :: ELT< * V -> V</procedure><br> <procedure>s16vector-quick-sort! :: ELT< * V -> V</procedure><br> <procedure>u16vector-quick-sort! :: ELT< * V -> V</procedure><br> <procedure>s32vector-quick-sort! :: ELT< * V -> V</procedure><br> <procedure>u32vector-quick-sort! :: ELT< * V -> V</procedure><br> <procedure>f32vector-quick-sort! :: ELT< * V -> V</procedure><br> <procedure>f64vector-quick-sort! :: ELT< * V -> V</procedure> where {{ELT< :: i1 * V(i1) * i2 * V(i2) -> boolean}} <procedure>s8vector-merge-sort! :: ELT< * V -> V</procedure><br> <procedure>u8vector-merge-sort! :: ELT< * V -> V</procedure><br> <procedure>s16vector-merge-sort! :: ELT< * V -> V</procedure><br> <procedure>u16vector-merge-sort! :: ELT< * V -> V</procedure><br> <procedure>s32vector-merge-sort! :: ELT< * V -> V</procedure><br> <procedure>u32vector-merge-sort! :: ELT< * V -> V</procedure><br> <procedure>f32vector-merge-sort! :: ELT< * V -> V</procedure><br> <procedure>f64vector-merge-sort! :: ELT< * V -> V</procedure> where {{ELT< :: i1 * V(i1) * i2 * V(i2) -> boolean}} == Examples csi> (f64vector-map (lambda (v) (* 2 v)) (f64vector 1 2 3)) -> #f64(2.0 4.0 6.0) csi> (f64vector-fold (lambda (v ax) (+ v ax)) (f64vector 1 2 3) 0) -> 6.0 ;; input vector is modified csi> (f64vector-quick-sort! (lambda (i1 v1 i2 v2) (< v1 v2)) (f64vector 1 4 2 3) ) #f64(1.0 2.0 3.0 4.0) == About this egg === Author [[/users/ivan-raikov|Ivan Raikov]] === Version history ; 1.9 : Added merge! and merge-sort! procedures ; 1.6 : Documentation converted to wiki format ; 1.5 : Ported to Chicken 4 ; 1.4 : Build script bug fix ; 1.3 : Build script updated for better cross-platform compatibility ; 1.2 : Extended fold and map interface to support multiple vector arguments ; 1.1 : Added foldi and mapi procedures ; 1.0 : Initial release === License Copyright 2007-2013 Ivan Raikov and the Okinawa Institute of Science and Technology This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A full copy of the GPL license can be found at <http://www.gnu.org/licenses/>.
Description of your changes:
I would like to authenticate
Authentication
Username:
Password:
Spam control
What do you get when you add 5 to 13?