REBOL [ Title: "Map" Date: 17-Nov-2002 Name: 'Map Version: 1.4.1 File: %map.r Author: "Andrew Martin" Needs: [%Arguments.r] Purpose: {Maps or applies the function to all elements of the series.} eMail: Al.Bri@xtra.co.nz Web: http://valley.150m.com Acknowledgements: [ "Joel Neely" "Ladislav" ] Example: [ Map func [n [number!]] [n * n] [1 2 3] Map [1 2 3] func [n [number!]] [n * n] Map [1 2 3 4 5 6] func [a] [print [a]] Map [1 2 3 4 5 6] func [a b] [print [a b]] Map [1 2 3 4 5 6] func [a b c] [print [a b c]] ] library: [ level: 'beginner platform: none type: 'tool domain: none tested-under: none support: none license: none see-also: none ] ] Map: function [ {Maps or applies the function to all elements of the series.} [catch] Arg1 [any-function! series!] Arg2 [any-function! series!] /Only "Inserts the result of the function as a series." /Full "Doesn't ignore none! values." ][ Result Results Function Series ][ throw-on-error [ any [ all [ any-function? :Arg1 series? :Arg2 (Function: :Arg1 Series: :Arg2) ] all [ any-function? :Arg2 series? :Arg1 (Function: :Arg2 Series: :Arg1) ] throw make error! reduce [ 'script 'cannot-use rejoin [ {"} mold 'Map " " mold type? :Arg1 {"} ] rejoin [ {"} mold type? :Arg2 {"} ] ] ] Results: make Series length? Series do compose/deep [ foreach [(Arguments :Function)] Series [ if ( either Full [ compose [not unset? set/any 'Result Function (Arguments :Function)] ] [ compose/deep [ all [ not unset? set/any 'Result Function (Arguments :Function) not none? Result ] ] ] ) [ (either Only ['insert/only] ['insert]) tail Results :Result ] ] ] Results ] ]