<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: abrudz</title><link>https://news.ycombinator.com/user?id=abrudz</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 14 Apr 2026 11:59:10 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=abrudz" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by abrudz in "Windows 11 Notepad to support Markdown"]]></title><description><![CDATA[
<p>I don't think I did anything special. I just uninstalled "Notepad", and that revealed the good old Notepad.</p>
]]></description><pubDate>Wed, 25 Feb 2026 21:36:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=47158248</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=47158248</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47158248</guid></item><item><title><![CDATA[New comment by abrudz in "In Praise of APL (1977)"]]></title><description><![CDATA[
<p>Yes, it can also a fork where A is an array while B and C are function and a tacit atop where either B is a monadic operator and A its array or function operand or A is a function and C is a monadic operator with B being its array or function operand. Finally, it can be a single derived function where B and C are monadic operators while A is B's array or function operand.</p>
]]></description><pubDate>Thu, 22 Jan 2026 11:39:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=46717944</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=46717944</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46717944</guid></item><item><title><![CDATA[New comment by abrudz in "In Praise of APL (1977)"]]></title><description><![CDATA[
<p>I'll be happy to give you a live personalised intro in <a href="https://apl.chat" rel="nofollow">https://apl.chat</a> or head over to <a href="https://challenge.dyalog.com/" rel="nofollow">https://challenge.dyalog.com/</a> for an automated guided introduction (with a chance of winning a prize).</p>
]]></description><pubDate>Thu, 22 Jan 2026 09:31:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=46717004</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=46717004</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46717004</guid></item><item><title><![CDATA[New comment by abrudz in "`std::flip`"]]></title><description><![CDATA[
<p>⍨</p>
]]></description><pubDate>Mon, 29 Sep 2025 19:08:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=45417553</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=45417553</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45417553</guid></item><item><title><![CDATA[New comment by abrudz in "The APL Challenge"]]></title><description><![CDATA[
<p><a href="https://apl.quest" rel="nofollow">https://apl.quest</a> might be of interest.</p>
]]></description><pubDate>Wed, 05 Feb 2025 05:25:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=42944201</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=42944201</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42944201</guid></item><item><title><![CDATA[New comment by abrudz in "Interview with Dr. Ken Iverson (1982)"]]></title><description><![CDATA[
<p>Also (mind the year this is from!):<p>— Can you teach a computer to write poetry?<p>— If you can teach it--yes, there's nothing easier. One of the things is that you could do, for example, you could simply give it a collection of poems or prose or whatever you have, and then provide a program which selects pieces from these, either individual words, individual phrases, individual passages, and so on, and merges them together according to some criterion, which you would then write into the program, and also with a certain element of chance. Usually, you know, you'd say, "Well, you want to pick this sometimes, that sometimes." Yes, you can write it, but you raise the question, what would be the point?</p>
]]></description><pubDate>Wed, 04 Dec 2024 19:03:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=42320775</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=42320775</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42320775</guid></item><item><title><![CDATA[New comment by abrudz in "Ampere WS-1 Japanese APL Clamtop"]]></title><description><![CDATA[
<p>Try it online at <a href="https://blazorcanvas20210704221924.azurewebsites.net/mcmpoc" rel="nofollow">https://blazorcanvas20210704221924.azurewebsites.net/mcmpoc</a></p>
]]></description><pubDate>Mon, 02 Dec 2024 20:52:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=42300265</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=42300265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42300265</guid></item><item><title><![CDATA[New comment by abrudz in "KlongPy: High-Performance Array Programming in Python"]]></title><description><![CDATA[
<p>Think "normal" call syntax like<p><pre><code>  foo(bar(baz(42)))
</code></pre>
and then remove the superfluous parens<p><pre><code>  foo bar baz 42
</code></pre>
The expression is evaluated from right to left.<p>Now, let's make two of the functions into object members:<p><pre><code>  A.foo(bar(B.baz(42)))
</code></pre>
Remove the parens, extracting the methods from their objects, instead feeding each object as a left argument to its former member function:<p><pre><code>  A foo bar B baz 42
</code></pre>
This is normal APL-style call syntax; right-to-left if you want.</p>
]]></description><pubDate>Mon, 02 Dec 2024 19:05:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=42299265</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=42299265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42299265</guid></item><item><title><![CDATA[New comment by abrudz in "KlongPy: High-Performance Array Programming in Python"]]></title><description><![CDATA[
<p>See <a href="https://github.com/Isaac-Flath/anki">https://github.com/Isaac-Flath/anki</a> and <a href="https://github.com/aeamaea/APL_Anki_Decks">https://github.com/aeamaea/APL_Anki_Decks</a></p>
]]></description><pubDate>Mon, 02 Dec 2024 18:51:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=42299102</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=42299102</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42299102</guid></item><item><title><![CDATA[New comment by abrudz in "A List of Ternary Operators"]]></title><description><![CDATA[
<p>APL brings another couple of ternaries (besides for those mentioned with regards to J):<p><pre><code>  x f[k] y
</code></pre>
This one is universal among traditional APLs (though some modern APLs, including J, remove it). However, it is traditionally only used for a concept of application along an axis of APL's multidimentional arrays, and only for a strictly limited set of built-in "operators". That said, GNU APL and NARS2000 both allow it on user-defined functions (which have infix syntax, just like "operators").<p><pre><code>  x n.f y
</code></pre>
This is infix application of the function f from the namespace n, so n must have namespace value, but it is still a proper argument because n isn't just an identifier, but can also be an expression:<p><pre><code>  x (expression).f y
</code></pre>
In fact, the expression can be an entire (multidimentional!) array of namespaces:<p><pre><code>  x (namespace1 namespace2).f y
</code></pre>
is equivalent to<p><pre><code>  (x[1] namespace1.f y[1])(x[2] namespace2.f y[2])
</code></pre>
Furthermore, f can be a built-in "operator" which appears to exist in every namespace, but which also takes the current namespace into consideration. For example, x⍳y is the position of y in x and if io0 is a namespace wherein indexing is 0-based and io1 is a namespace wherein indexing is 1-based, we can write:<p><pre><code>  'AX' 'BX' (ns0 ns1).⍳ 'X'
</code></pre>
and get the result 1 2 because X is at position 1 in AX with 0-based indexing but at position 2 of BX with 1-based indexing. (I'm not saying you should write code like this, but you <i>could</i>.)</p>
]]></description><pubDate>Tue, 05 Nov 2024 23:25:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=42056095</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=42056095</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42056095</guid></item><item><title><![CDATA[New comment by abrudz in "Ternary Operators"]]></title><description><![CDATA[
<p>Correct. Now try parsing `x (f1 f2 f3 f4 f5 f6) y`!</p>
]]></description><pubDate>Tue, 05 Nov 2024 23:06:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=42055986</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=42055986</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42055986</guid></item><item><title><![CDATA[New comment by abrudz in "Programming languages that blew my mind (2023)"]]></title><description><![CDATA[
<p>It was about APL that Alan J. Perlis said "A language that doesn't affect the way you think about programming, is not worth knowing." (number 19 of <a href="https://cpsc.yale.edu/epigrams-programming" rel="nofollow">https://cpsc.yale.edu/epigrams-programming</a>)</p>
]]></description><pubDate>Mon, 04 Nov 2024 07:53:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=42039463</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=42039463</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42039463</guid></item><item><title><![CDATA[New comment by abrudz in "Programming languages that blew my mind (2023)"]]></title><description><![CDATA[
<p>Have you looked at dfns (<a href="https://en.wikipedia.org/wiki/Direct_function" rel="nofollow">https://en.wikipedia.org/wiki/Direct_function</a>)? They allow you something very similar. Compare Dijkstra's GCL:<p><pre><code>  if a < b → c := true
   □ a ≥ b → c := false
  fi
</code></pre>
To an APL dfn with "guards":<p><pre><code>  c ← {
        a < b : true
        a ≥ b : false
      }
</code></pre>
As in GCL, if none of the guards hold true, the dfn (braces) will terminate without return value, and thus the code will abort with an error.</p>
]]></description><pubDate>Mon, 04 Nov 2024 07:47:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=42039433</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=42039433</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42039433</guid></item><item><title><![CDATA[New comment by abrudz in "Ask HN: What's the most creative 'useless' program you've ever written?"]]></title><description><![CDATA[
<p>I wrote a program to launch and kill tight loop threads such that Windows Task Manager's performance graph would spell out text (though of course with spaces below lines in letters filled out).</p>
]]></description><pubDate>Sun, 20 Oct 2024 16:17:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=41896385</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=41896385</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41896385</guid></item><item><title><![CDATA[New comment by abrudz in "Trap – Transformers in APL"]]></title><description><![CDATA[
<p>No, it appears on page 210 (logical page 220).</p>
]]></description><pubDate>Wed, 09 Oct 2024 11:17:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=41786604</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=41786604</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41786604</guid></item><item><title><![CDATA[New comment by abrudz in "Trap – Transformers in APL"]]></title><description><![CDATA[
<p>It is indeed Dyalog APL (evident by certain features used, and also what Co-dfns requires). And yes, I agree, especially since this uses the ".apl" file extension of GNU APL, rather than the ".apls" that Dyalog uses for shell scripts. Oddly enough, the "⎕IO←0" appears outside the ":Namespace" which means it cannot be used by other APL code.</p>
]]></description><pubDate>Wed, 09 Oct 2024 10:36:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=41786324</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=41786324</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41786324</guid></item><item><title><![CDATA[New comment by abrudz in "APL Demonstration (1975) [video]"]]></title><description><![CDATA[
<p>Yes, <a href="https://apl.wiki/Co-dfns" rel="nofollow">https://apl.wiki/Co-dfns</a></p>
]]></description><pubDate>Wed, 26 Jun 2024 22:53:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=40805491</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=40805491</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40805491</guid></item><item><title><![CDATA[New comment by abrudz in "Forgotten APL Influences (2016) [pdf]"]]></title><description><![CDATA[
<p>The paper's author speaks up in some episodes of the APL Campfire (<a href="https://apl.wiki/APL_Campfire" rel="nofollow">https://apl.wiki/APL_Campfire</a>):<p>- <a href="https://www.youtube.com/watch?v=w1VMeSzJLyE&list=PLYKQVqyrAEj91hZHbJiWOENHZP4JT8VFv" rel="nofollow">https://www.youtube.com/watch?v=w1VMeSzJLyE&list=PLYKQVqyrAE...</a><p>- <a href="https://www.youtube.com/watch?v=_jBQ53cRi0s&list=PLYKQVqyrAEj91hZHbJiWOENHZP4JT8VFv" rel="nofollow">https://www.youtube.com/watch?v=_jBQ53cRi0s&list=PLYKQVqyrAE...</a><p>- <a href="https://www.youtube.com/watch?v=a65K-0jaWc4&list=PLYKQVqyrAEj91hZHbJiWOENHZP4JT8VFv" rel="nofollow">https://www.youtube.com/watch?v=a65K-0jaWc4&list=PLYKQVqyrAE...</a></p>
]]></description><pubDate>Thu, 16 May 2024 20:30:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=40382760</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=40382760</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40382760</guid></item><item><title><![CDATA[New comment by abrudz in "Array languages vs. the curse of the spreadsheet"]]></title><description><![CDATA[
<p>That's actually a historical quirk, because modern keyboards have = where old APL keyboards had × and - where old APL keyboards had +. You'd press Shift+ for - and Shift× for ÷ meaning that Shift gives the inverse function. Similarly, they Shift/ for \ (which is the inverse of / in APL).<p>See <a href="https://en.wikipedia.org/wiki/APL_(programming_language)#/media/File:APL-keybd2.svg" rel="nofollow">https://en.wikipedia.org/wiki/APL_(programming_language)#/me...</a></p>
]]></description><pubDate>Wed, 06 Mar 2024 19:57:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=39620563</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=39620563</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39620563</guid></item><item><title><![CDATA[New comment by abrudz in "KamilaLisp – A functional, flexible and concise Lisp"]]></title><description><![CDATA[
<p>Dyalog APL's RIDE interface doesn't even need you to find the symbol on a language bar; just hover the mouse over it, and a tooltip appears: <a href="https://i.imgur.com/XtzRGUs.png" rel="nofollow">https://i.imgur.com/XtzRGUs.png</a></p>
]]></description><pubDate>Sat, 02 Mar 2024 20:01:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=39575328</link><dc:creator>abrudz</dc:creator><comments>https://news.ycombinator.com/item?id=39575328</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39575328</guid></item></channel></rss>