Concatenative topics
Concatenative meta
Other languages
Meta
Locals are a leaky abstraction. The leaks should be fixed as much as possible.
Locals also don't work with undo
. On the left hand side, they should bind locals.
There is still an issue with locals and fry:
[ 10 ] [ 0 '[ [let | A [ 10 ] | A _ + ] ] call . ] unit-test
Locals expands macros at parse time which is a problem in this case:
USING: math sequences locals combinators.short-circuit.smart ; IN: foo GENERIC: foo ( a -- b ) M: string foo reverse ; M: integer foo neg ; :: bar ( a -- b ) { [ a foo ] } && ;
Locals and macros which treat quotations as sequences
:: (funny-macro-test) ( obj quot -- ? ) { quot } 1&& ; inline : funny-macro-test ( n -- ? ) [ odd? ] (funny-macro-test) ; \ funny-macro-test must-infer [ t ] [ 3 funny-macro-test ] unit-test [ f ] [ 2 funny-macro-test ] unit-test
! Fry and locals [ 10 ] [ [let | | 0 '[ [let | A [ 10 ] | A _ + ] ] call . ] ] unit-test
! Smart combinators and wlet :: wlet-&&-test ( a -- ? ) [wlet | is-integer? [ a integer? ] is-even? [ a even? ] >10? [ a 10 > ] | { [ is-integer? ] [ is-even? ] [ >10? ] } && ] ; [ f ] [ 1.5 wlet-&&-test ] unit-test [ f ] [ 3 wlet-&&-test ] unit-test [ f ] [ 8 wlet-&&-test ] unit-test [ t ] [ 12 wlet-&&-test ] unit-test
This revision created on Sat, 7 Mar 2009 02:07:04 by slava