Yep, you can also use the syntax for it:

<< { "foo "bar" "baz" } [ create-word-in define-symbol ] each >>



On Tue, Sep 17, 2019 at 7:13 AM KUSUMOTO Norio <kusum...@na.rim.or.jp>
wrote:

> > How do I code to generate symbols at runtime? "define-symbol" seems to
> work
> > only at compile time.
>
> Oh, I was able to do it as follows:
>
>  [ "a-symbol" "factor-logica" create-word define-symbol ]
> with-compilation-unit
>
>
> --
> KUSUMOTO Norio
>
>
>
> > 2019/09/17 19:40、KUSUMOTO Norio <kusum...@na.rim.or.jp>のメール:
> >
> > Hello all,
> >
> >
> > How do I code to generate symbols at runtime? "define-symbol" seems to
> work
> > only at compile time.
> >
> > I'm writing an embedded language that runs on Factor with the
> capabilities of
> > a subset of Prolog. To achieve the anonymous variable functionality, I
> want to
> > generate as many symbols as needed at runtime.
> >
> > In the following code, the Prolog anonymous variables '_' are equivalent
> > to explicitly generated N1 to N11 logical variables. I want to automate
> > that operation.
> >
> >
> > USING: actor-logica factor-logica.built-in lists ;
> >
> > ! Do the same as this Prolog program
> > !
> > ! neighbor(L,R,[L,R|_]).
> > ! neighbor(L,R,[_|Xs]) :- neighbor(L,R,Xs).
> > !
> > ! zebra(X) :- Street = [H1,H2,H3],
> > !             member(house(red,english,_), Street),
> > !             member(house(_,spanish,dog), Street),
> > !             neighbor(house(_,_,cat), house(_,japanese,_), Street),
> > !             neighbor(house(_,_,cat), house(blue,_,_), Street),
> > !             member(house(_,X,zebra),Street).
> >
> > LOGIC-PREDS: neighboro zebrao ;
> > LOGIC-VARS: L R X Xs H1 H2 H3 Street ;
> > LOGIC-VARS: N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 ;
> > SYMBOLS: red blue ;
> > SYMBOLS: english spanish japanese ;
> > SYMBOLS: dog cat zebra ;
> > TUPLE: house color nationality pet ;
> >
> > { neighboro L R [ L R N1 cons cons ] } semper
> > { neighboro L R [ N1 Xs cons ] } { neighboro L R Xs } si
> >
> > { zebrao X } {
> >    { (=) Street [ { H1 H2 H3 } >list ] }
> >    { membero [ T{ house f red english N1 } ] Street }
> >    { membero [ T{ house f N2 spanish dog } ] Street }
> >    { neighboro [ T{ house f N3 N4 cat } ] [ T{ house f N5 japanese N6 }
> ]  Street }
> >    { neighboro [ T{ house f N7 N8 cat } ] [ T{ house f blue N9 N10 } ]
> Street }
> >    { membero [ T{ house f N11 X zebra } ] Street }
> > } si
> >
> >
> > Loading resource:work/factor-logica/factor-logica.factor
> > Loading resource:work/factor-logica/built-in/built-in.factor
> > IN: scratchpad { zebrao X } query .
> > { H{ { X japanese } } H{ { X japanese } } }
> >
> >
> > --
> > 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
>
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to