Gee, thanks :)
Want another two?
I'd sure like to see a few more modifiers in the language, such that we
can directly specify the network that is formed. We have our alpha
nodes, beta nodes, and join nodes...I have always thought that a rule
language that allows us to directly control the resulting network
(rather than automatically constructing a left-join Rete) could be very
cool. We could build Gator (or Treat) networks by hand that way, if we
determine a more optimal network structure. We can then also separately
solve the optimization problem for networks. CLIPS provides a small
level of control in that we can order our condition clauses and that
directs optimization, but syntactic constructions that control the
sharing of subnetworks are also feasible.
Rete networks are good for the general case, but you can get
significantly better performance if you can control precisely where the
joins are, permit n-way joins, and optionally attach memories to nodes.
It is fairly easy to see what the structure of such a language would be
if you went directly to the network structure. It's a little more
difficult to specify it in a CLIPS style.
Also -- I find that when I write more complex stuff I want the Jess fact
base to act a little more like a database. A more complex querying
capability that supports some relational operators would be pretty
helpful. There are plenty of little SQL languages out there that can do
all the parsing, predicate and joining...one of those might help. Or,
just provide the ability to index the fact base and couple a query
mechanism to that. We can achieve something like this with the
JessListener, but it would be nice to have it more fully available in
the Jess language itself, rather than through Java integration.
Specifically, here it would be convenient to be able to declare, for a
slot, that a given field is indexed...
; A fragment forms the basis of all other types
(deftemplate fragment
(slot type)
(slot id (default-dynamic (* (random)(random)))(indexed hash))
(slot creation (default-dynamic (now))(indexed ascending))
(slot sequence (default-dynamic (sequence))(indexed ascending))
)
Then, I can do something like this:
(find fragment sequence 57)
(query fragment (qand (q< sequence 60) (q> sequence 50)))
In this example, predicates and a fact set become first class
objects...right now my Rete networks get pretty crowded with extra nodes
that are used by my queries. I'd rather have other, ordered mechanisms
available. Of course I know the querying system is something that
you've been looking at for some time.
RJ
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Interesting. This could certainly solve some common difficulties, and
you're right that it's less messy than the traditional alternatives.
Thanks for writing. You're usually a source of very good ideas!
---------------------------------------------------------
Ernest Friedman-Hill
--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------