On Mon, 1 Nov 2010 20:02:14 +0000 (UTC)
Michael Woods <[email protected]> wrote:


> I guess that I'm asking if write() calls an object's toString method

Exactly.

> Question 2:
> 
> This is more a broad request for clarification, than a specific question.  
> I'm trying to understand the range interfaces.  I'm trying to make this
> linkedList class implement the InputRange interface (among others).  I'm 
> pretty sure that I've got opApply, opIndex, and opSlice figured out, but I 
> can't
> for the life of me figure out exactly what front(), popFront(), and empty() 
> are supposed to be doing.  (I realize that the opX functions aren't part of 
> the
> InputRange interface.)  Is popFront supposed to delete the actual front 
> element from the list?  Or is it supposed to represent some kind of internal
> pointer that is there solely for the purpose of range functionality?  If the 
> latter, how should the pointer get reset after it has gotten to the end once?
> Should the pointer even need to be reset, or is popFront supposed to only 
> cycle through once during the entire lifetime of the range object?

I'm not 100% sure because I'm also a D noob, rather projecting knowledge from 
other PLs -- so take my words with precaution. [Please, D gurus, tell if what 
follows is ok.]

If I'm right, the point of ranges is to offer kinds of particular views on all, 
a part, or an aspect of a collection; without having to create a separate 
collection just for that. Typical use is for traversal (iteration). Since you 
know python, its iterators (and generators) are kinds of ranges. Eg you can 
write an iterator to traverse a list in reverse order, or every third element 
-- without creating new lists for that. You can also make an iterator or 
generator on a "virtual list", eg generating squares of ints in a given range.

front(), popFront(), and empty() together form a way to implement a sequential 
iterator on a collection. [But I must admit it really does not fit my POV on 
the topic -- this trio strongly smells functional :-) and actually basically 
models a linked list -- I'm certain its designer has a heavy Lisp baggage! I 
would rather have a hasNext() and next() duo.]
Now, their working is simply to allow moving across elements, so no popFront() 
does not pop. Examples:
        routine         dynarray        list
        popFront        inc(ptr)        current = current.next
        front()         *ptr            current.element (possibly dereferenced)
        empty()         length == 0     length == 0 (maintained as field)
On a "true" linked list where every node implements the properties & methods of 
a list, then popFront is returning the second node, meaning the head of the 
rest: l = l.next.

Hope most of this is correct (critics welcome).


Denis
-- -- -- -- -- -- --
vit esse estrany ☣

spir.wikidot.com

Reply via email to