Re: List Searching With CWM

"Sean B. Palmer" wrote:
> 
> Hi,
> 
> There's something that I've been wanting to do in N3 rules fules for
> some time now, but didn't raise the issue. Basically, I want to be
> able to do a forEach loop on members of a DAML list, such that I can
> say:-
> 
>    this log:forAll :x , :y .
>    { :x daml:oneOf :y } log:implies [ :forEach :z; :in :y; :do { :z a
> :x } ] .
>    :ClubMember daml:oneOf (:John :Mary :Fred) .
> 
> and come up with:-
> 
>    :John a :ClubMember .
>    :Mary a :ClubMember .
>    :Fred a :ClubMember .
> 
> Is there a way to do this already,

yes; this is a basic list-processing task; you might
take a look at some lisp/prolog books to get a feel for it.
Iterate over the members of the list recursively:

  this log:forAll :l, :ll, :C, :x.
  { :C daml:oneOf :l } log:implies { :l :listMembers :C }.
  { :l :listMembers :C; ont:first :x } log:implies { :x a :C }.
  { :l :listMembers :C; ont:rest :ll } log:implies { :ll :listMembers :C
}.

Beware... the list handling in cwm changed a while ago;
I'm not sure first/rest are the right properties any more.
But whatever replaced them can be exploited the same way.

[...]
>    (:mail :name) a :UnambiguousPropertySet .

That's a more complex case, but not fundamentally different.


-- 
Dan Connolly, W3C http://www.w3.org/People/Connolly/

Received on Sunday, 11 November 2001 09:37:13 UTC