Front Page All Articles Recent Changes Random Article

Contents

Concatenative language

  • ACL
  • Ait
  • Breeze
  • Cat
  • colorForth
  • CoSy
  • Deque
  • Elymas
  • Enchilada
  • ETAC
  • Factor
  • Forth
  • Freelang
  • Gershwin
  • Joy
  • Kitten
  • Lviv
  • min
  • mjoy
  • Mlatu
  • Om
  • Onyx
  • Plorth
  • Popr
  • PostScript
  • Quackery
  • r3
  • Raven
  • Retro
  • Staapl
  • Stabel
  • Trith
  • Worst
  • xs
  • XY
  • 5th
  • 8th

Other languages

  • APL
  • C++
  • Erlang
  • FP trivia
  • Haskell
  • Io
  • Java
  • JavaScript
  • Lisp
  • ML
  • Oberon
  • RPL
  • Self
  • Slate
  • Smalltalk

Computer Science

  • Type systems
  • Language paradigms
  • Compilers
  • Interpreters
  • Garbage collection

Meta

  • Search
  • Farkup wiki format
  • People
  • Etiquette
  • Sandbox

Factor/To do/Locals

Locals are a leaky abstraction. The leaks should be fixed as much as possible.

Open problems

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 ] } && ;

Fixed

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 Mon, 1 Dec 2008 21:48:12 by slava

Latest Revisions Edit

All content is © 2008-2022 by its respective authors. By adding content to this wiki, you agree to release it under the BSD license.