On Wed, Oct 5, 2011 at 1:40 PM, Bob Nystrom <[email protected]> wrote:

>
>
> On Wed, Oct 5, 2011 at 7:18 AM, John J Barton <[email protected]
> > wrote:
>
>>
>>
>> On Tue, Oct 4, 2011 at 2:33 PM, Bob Nystrom <[email protected]> wrote:
>>
>>> That's correct. That's often the cost of concision. By analogy: you can
>>> do a lot of stuff using either an explicit stack data structure or
>>> recursion. Using recursion is often more concise but then the state is
>>> hidden from you in the callstack. Sometimes that's a good trade-off,
>>> sometimes it's not.
>>
>>
>> Thanks, that analogy helps confirm my opinion of generators. In my
>> experience, the good trade-off is recursion on data structures and the
>> not-good-trade-off is recursion for iteration.
>>
>
> Yes, I wasn't making any claim about using recursion *for iteration*.
> Maybe I need to be more concrete here:
>
> If you need to walk a tree, you can do so using recursion or you can use an
> explicit stack data structure. The former is usually more terse (because it
> implicitly relies on the callstack itself storing the stack) but the other
> can be more clear.
>
> *By analogy*, if you need to produce a sequence of values, you can do so
> using generators, or you can use an explicit iterator object. Again, the
> former is usually more terse (because the language automatically creates the
> iterator object for you given a function containing yield) but the latter
> can be more clear (because the state is laid bare).
>
> Note that those two paragraphs are separate. I'm not talking about using
> recursion for iteration. Is this clearer now?
>
> So far the only examples I've seen for generators involve iteration.
>
>
> Yup, that's what generators do. And recursion involves stacks.
>
> I've heard no clamor at all.
>>
>
> That may be true, but it may say as much about your surrounding auditory
> environment as it does the feature in question. You may be right, but simply
> saying "Bigfoot isn't in my living room" doesn't disprove the existence of
> Bigfoot.
>
> There *are* languages in wide use that have this feature. None of those
> languages (Lua, C#, Python) has a reputation for catering to the esoteric
> programming language fanbase.
>
>  Really this is a niche feature, an aid for the rare case where
>> conventional iterators are a poor match.
>>
>
> They said the same thing about closures. I agree that generators aren't the
> most important language feature in the world, but I think if you had them
> you'd find that you used them.
>
> Here's an example:
>
> let tree = [['a', 'b', 'c'], [['d', 'e'], 'f'], ['g']];
>
> let inOrder = walk(tree);
> for (node of walk(tree)) alert(node); // a, b, c, d, ...
>
> walk(tree) {
>   if (typeof tree == 'string') {
>     yield tree; // leaf
>   } else {
>     yield* walk(tree); // branch
>   }
> }
>
>
> What would the above look like without generators?
>


Woah there -- where does this syntax come from? Was `walk(tree) {...}`
supposed to be `function* walk(tree) {...}` instead? Or is this intended to
represent some sort of method generator? If the latter, doesn't this need
some mechanism to distinguish it from a non-generator method?

Has there been any discussion of a generator method syntax in the class
discussions?
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to