<div dir="auto">I like that, it's beginning to be expressive, even better than clojure. However, i think that clojure offers composable predicates thanks to lazyness... like Xtreams.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le lun. 8 mars 2021 à 21:38, Jaromir Matas <<a href="mailto:m@jaromir.net">m@jaromir.net</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">> I am looking for something like #collect:until: or #upToSatisfying:. I do<br>
want the stop element to be included here, not sure about the general case.<br>
><br>
> aButton withAllOwners<br>
>    collect: [:morph | morph color]<br>
>    until: [:morph | morph isSystemWindow].<br>
><br>
<br>
Hi again, ahh so you're actually looking for a generalized collect for any<br>
SequencableCollection or Stream :) Like this?<br>
<br>
(1 to: 100)<br>
        collect: [:x | x squared]<br>
        where: [:x | x even]<br>
        until: [:x | x squared = 2500]<br>
<br>
<br>
collect: collectBlock where: whereBlock until: untilBlock <br>
<br>
        | result supplier |<br>
        supplier := self readStream.<br>
        result := {} writeStream.<br>
        [[supplier atEnd]<br>
            whileFalse: [ | val | <br>
              val := supplier next.<br>
              (whereBlock value: val) ifTrue: [result nextPut: (collectBlock value:<br>
val)].<br>
              (untilBlock value: val) ifTrue: [^result contents]]<br>
        ] value.<br>
        ^result contents<br>
<br>
collect: colBlock until: untilBlock <br>
<br>
        ^self collect: colBlock where: [:each | true] until: untilBlock <br>
<br>
or even:<br>
<br>
collect: colBlock<br>
<br>
        ^self collect: colBlock until: [:each | true]<br>
<br>
<br>
<br>
<br>
-----<br>
^[^ Jaromir<br>
--<br>
Sent from: <a href="http://forum.world.st/Squeak-Dev-f45488.html" rel="noreferrer noreferrer" target="_blank">http://forum.world.st/Squeak-Dev-f45488.html</a><br>
<br>
</blockquote></div>