Re: more about object creation (ACTION-554)

Patrick Albert wrote:
> I like option A, because it is simple, and object creation in PRD has to
> be very simple.
>
> Two complementary remarks. 
>
> 1/ The variable that can be bound to the newly created object might not
> need t be declared. It's name and it's type -- the class of the new
> object -- suffice for the declaration.
>   
that's true of all the Forall variables.  We agreed we'd declare every 
variable, so it's a matter of
i. declare in the top-level Forall
ii. declare in an Exists in the conclusion (not legal in BLD, but is 
legal in FLD)
iii. introduce something PRD-specific, e.g. "Let"

Do(Let ?oid (new ?oid # SomeClass [ slot1 -> "init-val 1" ])) :- 1=1
> 2/ I don not understand why the initialization of the object is
> described as '[' (TERM '->' TERM)* ']', I would replace  by '['
> (SLOT-NAME '->' TERM)* ']'
>
>   
It allows the possibility of invoking a constructor.  Maybe :-)
>  Patrick. 
>
>
> -----Original Message-----
> From: public-rif-wg-request@w3.org [mailto:public-rif-wg-request@w3.org]
> On Behalf Of Gary Hallmark
> Sent: mardi 2 septembre 2008 23:36
> To: rif WG
> Subject: more about object creation (ACTION-554)
>
>
> At today's telecon we discussed object creation.  Christian and Patrick 
> wonder how one obtains a reference to the new object.  I.e. how to 
> support the following use case (expressed in FLD):
>
> Forall ?x (Exists ?y ?z And(?y # _Y ?z # _Z ?y[_z->?z] ?z[_x->?x]) :- ?x
>
> # _X)
>
> The proposed syntax
>
> 'new' CLASS '[' (TERM '->' TERM)* ']'
>
> provides no good way to do this.  I see several options:
>
> Option A. 'new' [Var '#'] CLASS '[' (TERM '->' TERM)* ']'
>
> e.g.
> Forall ?x ?z (Do(new ?z # _Z[_x->?x] new _Y[_z->?z]) :- ?x # _X)
>
> The Var ?z must be declared somewhere, presumably in the enclosing 
> Forall.  What happens if the Var is also referenced in the rule
> condition?
>
> Option B. Use the FLD syntax for PRD.  The concern is that this is 
> overly general and thus PRD would have many hard to specify restrictions
>
> on the use of Exists in a conclusion.
>
> Option C. use a builtin (e.g. rif:new) so that object creation could be 
> in core.  E.g.
>
> Forall ?x (And(rif:new(1 ?x) # _Z rif:new(1 ?x)[_x->?x] rif:new(2 ?x) # 
> _Y rif:new(2 ?x)[_z->rif:new(1 ?x]) :- ?x # _X)
>
> There are n+1 arguments to rif:new.  The n Forall variables and one 
> "occurrence number".  There are m distinct occurrence numbers per 
> ruleset, where m is the number of existential variables in the ruleset 
> that are "skolemized".  In the above, n=1 and m=2.  Note that rif:new 
> has variable arity (n+1).
>
> The drawback of option C is that production rule engines don't typically
>
> provide rif:new as a function.  A PRD translator would find it very 
> difficult to translate rif:new in a condition, or indeed in an action 
> except for when used in membership with a Class Constant and in frames.
>
> Also, PRD would need to support And() and "#" in conclusions, but "#" 
> only in the case where the left side is rif:new...
>
>   

Received on Tuesday, 9 September 2008 06:47:56 UTC