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