"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 GMT
This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 July 2008 08:08:29 GMT