((section 2 "Outdated egg!" (p "This is an egg for CHICKEN 4, the unsupported old release.  You're almost certainly looking for " (int-link "/eggref/5/srfi-4-utils" "the CHICKEN 5 version of this egg") ", if it exists.") (p "If it does not exist, there may be equivalent functionality provided by another egg; have a look at the " (link "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")) (section 2 "srfi-4-utils" (p "Utility functions for SRFI-4 vectors.") (toc)) (section 2 "Usage" (p "(require-extension srfi-4-utils)")) (section 2 "Documentation" (p (tt "srfi-4-utils") " contains a set of convenience procedures for " (link "http://srfi.schemers.org/srfi-4/srfi-4.html" "SRFI-4") " vectors: " (tt "fold") ", " (tt "map") ", " (tt "quick-sort!") ", " (tt "merge!") ", " (tt "merge-sort!") ".") (section 3 "Procedures" (def (sig (procedure "s8vector-fold :: F * X0 * V [* V1 ... VN] -> XN" (id s8vector-fold)) (procedure "u8vector-fold :: F * X0 * V [* V1 ... VN] -> XN" (id u8vector-fold)) (procedure "s16vector-fold :: F * X0 * V [* V1 ... VN] -> XN" (id s16vector-fold)) (procedure "u16vector-fold :: F * X0 * V [* V1 ... VN] -> XN" (id u16vector-fold)) (procedure "s32vector-fold :: F * X0 * V [* V1 ... VN] -> XN" (id s32vector-fold)) (procedure "u32vector-fold :: F * X0 * V [* V1 ... VN] -> XN" (id u32vector-fold)) (procedure "f32vector-fold :: F * X0 * V [* V1 ... VN] -> XN" (id f32vector-fold)) (procedure "f64vector-fold :: F * X0 * V [* V1 ... VN] -> XN" (id f64vector-fold))) (p "where " (tt "F :: V(I) [ * V1(I) ... VN(I)] * AX -> AX"))) (def (sig (procedure "s8vector-map  :: F * V [ * V1 ... VN] -> V" (id s8vector-map)) (procedure "u8vector-map  :: F * V [ * V1 ... VN] -> V" (id u8vector-map)) (procedure "s16vector-map  :: F * V [ * V1 ... VN] -> V" (id s16vector-map)) (procedure "u16vector-map  :: F * V [ * V1 ... VN] -> V" (id u16vector-map)) (procedure "s32vector-map  :: F * V [ * V1 ... VN] -> V" (id s32vector-map)) (procedure "u32vector-map  :: F * V [ * V1 ... VN] -> V" (id u32vector-map)) (procedure "f32vector-map  :: F * V [ * V1 ... VN] -> V" (id f32vector-map)) (procedure "f64vector-map  :: F * V [ * V1 ... VN] -> V" (id f64vector-map)))) (def (sig (procedure "s8vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN" (id s8vector-foldi)) (procedure "u8vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN" (id u8vector-foldi)) (procedure "s16vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN" (id s16vector-foldi)) (procedure "u16vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN" (id u16vector-foldi)) (procedure "s32vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN" (id s32vector-foldi)) (procedure "u32vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN" (id u32vector-foldi)) (procedure "f32vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN" (id f32vector-foldi)) (procedure "f64vector-foldi :: F * X0 * V [ * V1 ... VN] -> XN" (id f64vector-foldi))) (p "where " (tt "F :: I * V(I) [ * V1(I) ... VN(I)] * AX -> AX"))) (def (sig (procedure "s8vector-mapi  :: F * V [* V1 ... VN] -> V" (id s8vector-mapi)) (procedure "u8vector-mapi  :: F * V [* V1 ... VN] -> V" (id u8vector-mapi)) (procedure "s16vector-mapi  :: F * V [* V1 ... VN] -> V" (id s16vector-mapi)) (procedure "u16vector-mapi  :: F * V [* V1 ... VN] -> V" (id u16vector-mapi)) (procedure "s32vector-mapi  :: F * V [* V1 ... VN] -> V" (id s32vector-mapi)) (procedure "u32vector-mapi  :: F * V [* V1 ... VN] -> V" (id u32vector-mapi)) (procedure "f32ector-mapi  :: F * V [* V1 ... VN] -> V" (id f32ector-mapi)) (procedure "f64vector-mapi  :: F * V [* V1 ... VN] -> V" (id f64vector-mapi))) (p "where " (tt "F :: I * V(I) [* V1(I) ... VN(I)] -> V"))) (def (sig (procedure "s8vector-blit!  :: VFROM * I * END * VTO * J] -> V" (id s8vector-blit!)) (procedure "u8vector-blit!  :: VFROM * I * END * VTO * J] -> V" (id u8vector-blit!)) (procedure "s16vector-blit!  :: VFROM * I * END * VTO * J] -> V" (id s16vector-blit!)) (procedure "u16vector-blit!  :: VFROM * I * END * VTO * J] -> V" (id u16vector-blit!)) (procedure "s32vector-blit!  :: VFROM * I * END * VTO * J] -> V" (id s32vector-blit!)) (procedure "u32vector-blit!  :: VFROM * I * END * VTO * J] -> V" (id u32vector-blit!)) (procedure "f32vector-blit!  :: VFROM * I * END * VTO * J] -> V" (id f32vector-blit!)) (procedure "f64vector-blit!  :: VFROM * I * END * VTO * J] -> V" (id f64vector-blit!))) (p "Copies subvector " (tt "VFROM[I,END)") " into " (tt "VTO[J,J+(END-I))") ".")) (def (sig (procedure "s8vector-merge!  :: ELT< * VA * P * Q * R * VB * N -> VB" (id s8vector-merge!)) (procedure "u8vector-merge!  :: ELT< * VA * P * Q * R * VB * N -> VB" (id u8vector-merge!)) (procedure "s16vector-merge!  :: ELT< * VA * P * Q * R * VB * N -> VB" (id s16vector-merge!)) (procedure "u16vector-merge!  :: ELT< * VA * P * Q * R * VB * N -> VB" (id u16vector-merge!)) (procedure "s32vector-merge!  :: ELT< * VA * P * Q * R * VB * N -> VB" (id s32vector-merge!)) (procedure "u32vector-merge!  :: ELT< * VA * P * Q * R * VB * N -> VB" (id u32vector-merge!)) (procedure "f32vector-merge!  :: ELT< * VA * P * Q * R * VB * N -> VB" (id f32vector-merge!)) (procedure "f64vector-merge!  :: ELT< * VA * P * Q * R * VB * N -> VB" (id f64vector-merge!))) (p "Given vector VA and indices P, Q, R such that P < Q < R, merges subvector " (tt "VA[P,Q)") " and subvector " (tt "A[Q,R)") " into vector " (tt "B[N,N+(R-P))") ". The comparison function " (tt "ELT<") " must be of type  " (tt "ELT< :: i1 * V(i1) * i2 * V(i2) -> boolean") ".")) (def (sig (procedure "s8vector-quick-sort!  :: ELT< * V -> V" (id s8vector-quick-sort!)) (procedure "u8vector-quick-sort!  :: ELT< * V -> V" (id u8vector-quick-sort!)) (procedure "s16vector-quick-sort!  :: ELT< * V -> V" (id s16vector-quick-sort!)) (procedure "u16vector-quick-sort!  :: ELT< * V -> V" (id u16vector-quick-sort!)) (procedure "s32vector-quick-sort!  :: ELT< * V -> V" (id s32vector-quick-sort!)) (procedure "u32vector-quick-sort!  :: ELT< * V -> V" (id u32vector-quick-sort!)) (procedure "f32vector-quick-sort!  :: ELT< * V -> V" (id f32vector-quick-sort!)) (procedure "f64vector-quick-sort!  :: ELT< * V -> V" (id f64vector-quick-sort!))) (p "where " (tt "ELT< :: i1 * V(i1) * i2 * V(i2) -> boolean"))) (def (sig (procedure "s8vector-merge-sort!  :: ELT< * V -> V" (id s8vector-merge-sort!)) (procedure "u8vector-merge-sort!  :: ELT< * V -> V" (id u8vector-merge-sort!)) (procedure "s16vector-merge-sort!  :: ELT< * V -> V" (id s16vector-merge-sort!)) (procedure "u16vector-merge-sort!  :: ELT< * V -> V" (id u16vector-merge-sort!)) (procedure "s32vector-merge-sort!  :: ELT< * V -> V" (id s32vector-merge-sort!)) (procedure "u32vector-merge-sort!  :: ELT< * V -> V" (id u32vector-merge-sort!)) (procedure "f32vector-merge-sort!  :: ELT< * V -> V" (id f32vector-merge-sort!)) (procedure "f64vector-merge-sort!  :: ELT< * V -> V" (id f64vector-merge-sort!))) (p "where " (tt "ELT< :: i1 * V(i1) * i2 * V(i2) -> boolean"))))) (section 2 "Examples" (pre "csi> (f64vector-map (lambda (v) (* 2 v)) (f64vector 1 2 3))\n-> #f64(2.0 4.0 6.0)\n\ncsi> (f64vector-fold (lambda (v ax) (+ v ax)) (f64vector 1 2 3) 0)\n-> 6.0\n\n;; input vector is modified\ncsi> (f64vector-quick-sort! (lambda (i1 v1 i2 v2) (< v1 v2)) (f64vector 1 4 2 3) )\n#f64(1.0 2.0 3.0 4.0)")) (section 2 "About this egg" (section 3 "Author" (p (int-link "/users/ivan-raikov" "Ivan Raikov"))) (section 3 "Version history" (dl (dt "1.9") (dd "Added merge! and merge-sort! procedures") (dt "1.6") (dd "Documentation converted to wiki format") (dt "1.5") (dd "Ported to Chicken 4") (dt "1.4") (dd "Build script bug fix") (dt "1.3") (dd "Build script updated for better cross-platform compatibility") (dt "1.2") (dd "Extended  fold and map interface to support multiple vector arguments") (dt "1.1") (dd "Added foldi and mapi procedures") (dt "1.0") (dd "Initial release"))) (section 3 "License" (pre "Copyright 2007-2013 Ivan Raikov and the Okinawa Institute of Science and Technology\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or (at\nyour option) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nGeneral Public License for more details.\n\nA full copy of the GPL license can be found at\n<http://www.gnu.org/licenses/>."))))