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