Some small simplifications using ``counter`` and ``slots>tuple``:

```
SYMBOL: *anonymouse-var-no* 0 *anonymouse-var-no* set-global

: reset-anonymouse-var-no ( -- ) 0 *anonymouse-var-no* set-global ;

: generate-anonymouse-var ( -- var-symbol )
    [
        *anonymouse-var-no* counter "ANONYMOUSE-VAR-#%d_" sprintf
        "factor-logica" create-word dup define-symbol
        LOGIC-VAR over set-global
    ] with-compilation-unit ;

: replace-anonymouse-vars ( before -- after )
    {
        { [ dup _ = ] [ drop generate-anonymouse-var ] }
        { [ dup sequence? ] [ [ replace-anonymouse-vars ] map ] }
        { [ dup tuple? ] [
            [ tuple-slots [ replace-anonymouse-vars ] map ]
            [ class-of slots>tuple ] bi ] }
        [ ]
    } cond ;
```


On Wed, Sep 18, 2019 at 3:21 PM KUSUMOTO Norio <kusum...@na.rim.or.jp>
wrote:

> > Yep, you can also use the syntax for it:
> >
> > << { "foo "bar" "baz" } [ create-word-in define-symbol ] each >>
>
>
>
> Thank you.
> My program needs to make a symbol every time it finds '_'.
> It became as follows:
>
> SYMBOL: *anonymouse-var-no* 0 *anonymouse-var-no* set-global
>
> : reset-anonymouse-var-no ( -- )  0 *anonymouse-var-no* set-global ;
>
> : inc-anonymouse-var-no ( -- )
>     *anonymouse-var-no* get-global 1 + *anonymouse-var-no* set-global ;
>
> : generate-anonymouse-var ( -- var-symbol )
>     [
>         inc-anonymouse-var-no
>         *anonymouse-var-no* get-global "ANONYMOUSE-VAR-#%d_" sprintf
>         "factor-logica" create-word dup dup
>         define-symbol
>         LOGIC-VAR swap set-global
>     ] with-compilation-unit ;
>
> : replace-anonymouse-vars ( before -- after )
>     {
>         { [ dup _ = ] [ drop generate-anonymouse-var ] }
>         { [ dup sequence? ] [ [ replace-anonymouse-vars ] map ] }
>         { [ dup tuple? ] [
>               [ class-of 1array ] [ tuple-slots ] bi
>               [ replace-anonymouse-vars ] map append >tuple ] }
>         [ ]
>     } cond ;
>
> --
> KUSUMOTO Norio
>
>
>
> _______________________________________________
> Factor-talk mailing list
> Factor-talk@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to