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 <[email protected]>
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
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>
_______________________________________________
Factor-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/factor-talk