From 7d27d64f36f2b14570e358f72c0509d4501a028e Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Thu, 25 Apr 2013 20:48:04 -0700 Subject: [PATCH] sequences.extras: cleanup reduce's a little. --- extra/sequences/extras/extras.factor | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 9a5bd46688..14aee5121a 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -6,16 +6,17 @@ IN: sequences.extras : reduce1 ( seq quot -- result ) [ unclip ] dip reduce ; inline -:: reduce-r ( list identity quot: ( obj1 obj2 -- obj ) -- result ) - list empty? - [ identity ] - [ list rest identity quot reduce-r list first quot call ] if ; - inline recursive +:: reduce-r ( seq identity quot: ( obj1 obj2 -- obj ) -- result ) + seq [ identity ] [ + unclip [ identity quot reduce-r ] [ quot call ] bi* + ] if-empty ; inline recursive ! Quot must have static stack effect, unlike "reduce" -:: reduce* ( seq id quot -- result ) seq - [ id ] - [ unclip id swap quot call( prev elt -- next ) quot reduce* ] if-empty ; inline recursive +:: reduce* ( seq identity quot: ( prev elt -- next ) -- result ) + seq [ identity ] [ + unclip identity swap quot call( prev elt -- next ) + quot reduce* + ] if-empty ; inline recursive :: combos ( list1 list2 -- result ) list2 [ [ 2array ] curry list1 swap map ] map concat ;