From b91a314f0e503de7b9a256f32506dac7b0e1fe19 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 26 May 2008 00:48:18 -0500 Subject: [PATCH] Another recursive fry fi --- extra/fry/fry-tests.factor | 10 ++++++++++ extra/fry/fry.factor | 17 ++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/extra/fry/fry-tests.factor b/extra/fry/fry-tests.factor index eb59ffae4e..6d6abba23c 100755 --- a/extra/fry/fry-tests.factor +++ b/extra/fry/fry-tests.factor @@ -52,3 +52,13 @@ sequences ; [ { 1 { 2 { 3 } } } ] [ 1 2 3 '[ , [ , [ , 1array ] call 2array ] call 2array ] call ] unit-test + +{ 1 1 } [ '[ [ [ , ] ] ] ] must-infer-as + +[ { { { 3 } } } ] [ + 3 '[ [ [ , 1array ] call 1array ] call 1array ] call +] unit-test + +[ { { { 3 } } } ] [ + 3 '[ [ [ , 1array ] call 1array ] call 1array ] call +] unit-test diff --git a/extra/fry/fry.factor b/extra/fry/fry.factor index 27a321ed92..4581c048fd 100755 --- a/extra/fry/fry.factor +++ b/extra/fry/fry.factor @@ -46,15 +46,22 @@ DEFER: (shallow-fry) shallow-fry ] if* ; +: fry-specifier? ( obj -- ? ) { , namespaces:, @ } member? ; + +: count-inputs ( quot -- n ) + [ + { + { [ dup callable? ] [ count-inputs ] } + { [ dup fry-specifier? ] [ drop 1 ] } + [ drop 0 ] + } cond + ] map sum ; + : fry ( quot -- quot' ) [ [ dup callable? [ - [ - [ { , namespaces:, @ } member? ] filter length - \ , % - ] - [ fry % ] bi + [ count-inputs \ , % ] [ fry % ] bi ] [ namespaces:, ] if ] each ] [ ] make deep-fry ;