Date: Nov 20, 2012 4:40 PM
Author: Graham Cooper
Subject: Re: PROLOG ENGINES ARE REALLLLLLY SLOW! ((SQL-UNIFY))

On Nov 21, 7:07 am, Graham Cooper <grahamcoop...@gmail.com> wrote:
> > SQL-UNIFY
> > SELECT * FROM TTAILS, TPRO
> > WHERE TTAILS.REF = TPRO.REF
> > AND TTAILS.FIELD = TPRO.FIELD
> > ORDER BY TPRO.ID

>
> The result SQL Join will look like this.
>
> FACT
> vert( pnt(X,Y) (pnt(X,Z)).         //TPRO.ID = 21
>
> QUERY
> ?-  vert( pnt(1,2) (X,Y)).          //TTAIL.ID = 1   (2 vars
> substituted)
>
> T.ID T.REF T. FLD T.TYP P.ID P.REF P.FLD
> ========================================
> 1    1     vert   H     21   1     vert
> 1    2     pnt    P     21   2     vert
> 1    3     pnt    P     21   3     pnt



Actually you would only get 3 matches, to get 5 matches use this.

WHERE (TTAILS.REF=TPRO.REF) OR (TPRO.TYP='V')

---

I had some success with this query method on a different table design.

www.microPEOLOG.com

[vert [pnt 1 2] [pnt 1 4]]?

UNIFY:> SELECT * FROM TPROLOG WHERE typ='H'
AND ((p1='vert')) AND
((p2='pnt') OR v2) AND
((p3='pnt') OR v3)

TRACE:1 vert( pnt pnt ...

BOTH TERMS:2

vvvvvv SUBQUERY par2 578:286 vvvvv

UNIFY:> SELECT * FROM TPROLOG WHERE id=286 AND ((p1='pnt'))
AND ((p2='1') OR v2)
AND ((p3='2') OR v3)

...

That was an old method though.

Herc