<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
On 3/7/25 5:24 PM, Ezequiel Birman via Cuis-dev wrote:<br>
<blockquote type="cite"
cite="mid:CAOo=t4c-kHGBhweiune-V1e26T86jqbOXAf=hfB+s4KM-05b5A@mail.gmail.com">
<pre class="moz-quote-pre" wrap="">Hello
I wanted a *reject:thenDo:*. so instead of:
| taskbar userInterface |
</pre>
<blockquote type="cite">
<pre class="moz-quote-pre" wrap="">
"If we were to ommit this, the taskbar wouldn't exist yet, and therefore
taskbar would be initialized to nil"
*self runningWorld doOneCycleNow.*
*userInterface := UISupervisor ui.taskbar := userInterface taskbar.*
"Remove all morphs except for the taskbar. We also leave code windows
intact in case we are recovering from a crash."
*userInterface submorphs*
* select: [ :morph | (morph isKindOf: CodeWindow) not and: [ morph ~=
taskbar ]]*
* thenDo: #delete.*
</pre>
</blockquote>
<pre class="moz-quote-pre" wrap="">
I can rewrite:
</pre>
<blockquote type="cite">
<pre class="moz-quote-pre" wrap="">"Remove all morphs except for the taskbar. We also leave code windows
intact in case we are recovering from a crash."
*userInterface submorphs*
* reject: [ :morph | (morph isKindOf: CodeWindow) or: [ morph = taskbar
]]*
* thenDo: #delete.*
</pre>
</blockquote>
<pre class="moz-quote-pre" wrap="">
While I was at it, I refactored *select:ThenCollect:* to avoid iterating
twice, then added a *reject:thenCollect:* just for the sake of symmetry.
I attach the changeset in case you find it useful; but I wanted to know
what is your opinion on adding tests that exercise higher-level messages
like these. If they are needed or wanted, I can also add them to
BaseImageTests.
</pre>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
</blockquote>
Hi Ezequiel, Hello List Members,<br>
<br>
what do think about a package that adds some extensions methods<br>
to the collection classes? I attached such a package and its test
package.<br>
<br>
Its focus is currently on adding something similar<br>
to Python's list comprehensions to Cuis/Haver.<br>
<br>
This code
(<a class="moz-txt-link-freetext" href="https://hg.sr.ht/~cy-de-fect/GF3/browse/gf/base.py?rev=tip#L290">https://hg.sr.ht/~cy-de-fect/GF3/browse/gf/base.py?rev=tip#L290</a>):<br>
<br>
<pre> <span class="k">def</span> <span class="nf">dominates</span><span class="p">(</span><span class="n">dom</span><span class="p">,</span> <span class="n">sub</span><span class="p">,</span>
<span class="n">orders</span><span class="o">=</span><span class="nb">tuple</span><span class="p">(</span><span class="nb">dict</span><span class="p">((</span><span class="n">t</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">mro</span><span class="p">))</span>
<span class="k">for</span> <span class="n">mro</span> <span class="ow">in</span> <span class="n">mros</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">dom</span> <span class="ow">is</span> <span class="n">sub</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="nb">all</span><span class="p">(</span><span class="n">order</span><span class="p">[</span><span class="n">d</span><span class="p">]</span> <span class="o"><=</span> <span class="n">order</span><span class="p">[</span><span class="n">s</span><span class="p">]</span>
<span class="k">for</span> <span class="n">d</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">order</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">dom</span><span class="p">,</span> <span class="n">sub</span><span class="p">,</span> <span class="n">orders</span><span class="p">))</span></pre>
<br>
roughly translates to this piece of Cuis code:<br>
<br>
orders := someHierarchies collect: [ :hierarchy | |
order |<br>
order := Dictionary ofRoom: hierarchy size.<br>
hierarchy withIndexDo: [ :type :index | order at:
type put: index ].<br>
order ].<br>
dominates := [ :dom :sub |<br>
dom ~~ sub and: [<br>
{ dom. sub. orders } zippedAllSatisfy: [ :d :s
:order |<br>
(order at: d) <= (order at: s) ] ] ].<br>
<br>
<br>
Have fun and Best Regards,<br>
<br>
Gerald<br>
</body>
</html>