[rules-dev] Hilog support for query literals

Mark Proctor mproctor at codehaus.org
Sun Aug 7 02:06:11 EDT 2011


Hilog supports something called "generic programs". You can think of 
these as query literals you can pass around and call, bit like function 
literals.

Because Hilog is untyped it uses a separate parenthesis to allow query 
literals to be passed:
http://www.cs.sunysb.edu/~warren/xsbbook/node46.html

"... snip ....
closure(R)(X,Y) :- R(X,Y).
closure(R)(X,Y) :- R(X,Z), closure(R)(Z,Y).

Now given any binary relation, one can use use this definition to 
compute its closure. For example, we can define a binary predicate, 
|parent| as follows:

:- hilog parent.
parent(able,adam).
parent(able,eve).
parent(cain,adam).
parent(cain,eve).
etc

and then we can use the generic definition of closure to find anscestors:

| ?- clo
... snip ...."

We could supprt this if we added generics to our query literals, probably something like:

query closure( Query<String, String>  q, String x, String y )
     q( x, y )
     or
     ( q( x, z ) and q(z, y) )
end

Anyway something worth thinking on, when we start to look at function literal support in Drools, we should probably address the two at the same time.

Mark



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20110807/8eace689/attachment.html 


More information about the rules-dev mailing list