Re: Lisp accessors for PL-ITERATOR values.

"Robert P. Goldman" <[email protected]> Tue, 06 Nov 2007 18:01:01 -0600
Newsgroups gmane.comp.ai.powerloom
Organization SIFT, LLC
Message-ID <[email protected]>
Thomas Russ wrote:
> Just to close out this discussion, since there was a wrinkle I had  
> forgotten about:
> 
> PowerLoom's lisp translation comes in two versions, one which uses  
> CLOS objects to implement the Stella/PowerLoom objects and one which  
> uses structs (defstruct) instead.  The default release uses structs  
> for speed.  But the accessors for slots look different in the CLOS  
> and the STRUCT version.
> 
> In the CLOS version, values from Pl-iterator are accessed using the  
> generic function "%value", which works for all iterators and is  
> always in the STELLA package.
> 
> In the Struct version, values from Pl-iterator are accessed using the  
> function "%pl-iterator.value" in the PLI package, which works only on  
> pl-iterators.  Other iterators have their own, specially qualified  
> names that are used to get the values, generally in the STELLA package.
> 
> So that means that if you write lisp code to manipulate pl-iterators,  
> you need to be aware of this distinction.  For the more common Struct  
> case, you could iterator through all concepts by doing something like:
> 
> 
>    (let ((iter (pli:s-retrieve "all (concept ?x)" "PL-USER" null)))
>      (loop while (stella::next? iter)
>            do (print (pli::%pl-iterator.value iter))))

Is there any reason why compile-time conditionalization of the #+ sort
couldn't be used to hide this from the programmer?

I.e., something like

#-stella-clos
(defun %value (x) (pli::%pl-iterator.value iter)))

or, for that matter can't you provide a clos accessor to the iterators,
something like this:

(defmethod %value ((pli::%pl-iterator x))
  (pli::%pl-iterator.value)))

I suppose the latter is less desirable, since the method dispatch might
be costly...

best,
r

-- 
Robert P. Goldman
Senior Scientist
Smart Information Flow Technologies (d/b/a SIFT, LLC)

211 N. First St., Suite 300
Minneapolis, MN 55401

Voice:	(612) 384-3454
Email:    [email protected]