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

Reply via email to