In case you ever wanted to write really short APL code

You can find more of his works (including videos) at John Scholes - APL Wiki

3 Likes

Thanks for that information @abrudz , I found one of John’s talks quite interesting and right up my alley;

A Plea for simplicity.

https://dyalog.tv/Dyalog08/?v=vUS0t-z1-iA

This is great! I also like to practice code golfing problems when learning a new programming language. https://problems.tryapl.org/ has a bunch of problems from yearly APL competitions, and validates your solutions against example sets

2 Likes

2022 APL Problem Solving Competition is on. The competition offers cash prizes. The deadline for submission is Friday 29 July 2022 at 23:59 BST. Good luck.

2 Likes

Hi @abrudz, I have some trouble following the APIwiki - Dfn. I hope it is ok to ask you here.

The following example (nth root ⍺√⍵) is not working.

image

The root function works if ⍺←2 is removed.
image
Of course, it is expected to get “divide by zero” error when is 0.

The documentation under “Guards” suggested that we can deal with it by adding ⍺=0:0.
image

I tried the following combos; however, there all failed explicitly or silently.

Could you please advise what is the best practice to catch edge cases? Thank you in advance.

PS. I use Dyalog APL version 18 in Windows.

The problem is that the function has multiple statements ⍺←2 and ⍵*÷⍺ but what you’ve put into the notebook document is just a single statement ⍺←2 ⍵*÷⍺ =. You can separate statements with as in root ← {⍺←2 ⋄ ⍵*÷⍺} or use `]dinput to indicate that this notebook block defines a multiline function:

]dinput
root ← {
    ⍺←2
    ⍵*÷⍺
}

Similarly, for the function with a guard, write root ← {⍺=0:0 ⋄ ⍵*÷⍺} or

]dinput
root ← {
    ⍺=0:0
    ⍵*÷⍺
}

We’ll look into making this automated in the future, so you can omit ]dinput.

4 Likes

That would indeed be much more intuitive - thanks!

2 Likes

I am having fun practising APL based on the Competition questions. :heart_eyes:
image

Jeremy,
Could you cover the following symbols/operators in the coming sessions, please? :pray:
⌸, ⊆,⊂, ↑,↓, @, Reduce N-Wise

1 Like

Why those in particular? What’s “Reduce N-Wise”?

/ covers n-wise reduce I believe. I think it is called n-wise reduce vs reduce when used with a bracket axis to specify n axis, such as the second axis in +/[2] 3 3 3 ⍴ ⍳27.

1 Like

No, N-wise Reduce is the dyadic form of Reduce, which reduces over each window of size N:

      3+/3 1 4 1 5
8 6 10

Same as:

      (+/3 1 4)(+/1 4 1)(+/4 1 5)
8 6 10
2 Likes

Because each problem in the competition has a hint for one or more primitives that could be useful in solving it, e.g.:

:bulb: Hint: The Reduce N-Wise operator Xf/Y could help with solving this problem.

The ones listed by @Moody are the ones given in hints that you haven’t covered yet.

2 Likes

Hi Adam, I hope that it does not count as cheating. As a beginner, I find the Dyalog documentation is a bit hard to understand. I just want Jeremy to go through them as usual. Hopefully, other fastai folks with more programming experience may join the competition as well.

Not cheating at all. The Dyalog documentation is very much a reference for those that already know the language. You might find APL Wiki’s articles more pedagogical. E.g. see Windowed Reduce - APL Wiki

1 Like

Hey @Moody

I also have been having lots of fun attempting the 2022 APL Problem Solving Competition questions. Working on the Phase 1 problem set has been very enlightening. I have learned so much while struggling with these problems.

After the competition is over I would like to compare our solutions :slight_smile:

1 Like

Same here. My current solutions are very hacky. Hopefully, I can improve them further when I learn more glyphs.

I also work on Dyalog Course and try to solve simpler problems. The answers are under the collapsed headings. So, it is very beginner friendly. :sweat_smile:

1 Like

Thanks for mentioning this. I wonder if it should go in the top post. I have been working through the ‘Zark tutorial’ on the Dyalog website, I didn’t know about this course until I saw your post.

3 Likes

I just finished Phase 1! Some of my solutions were terrible. Others turned out quite nice. When the submission deadline has passed I will create a new thread to discuss the problems.

3 Likes

Well done! Are you going to enter Phase 2 of the competition? I am stuck at the moment and researching how to do loop in a loopless language. Can you recommend some beginner-friendly resources to me?

I hope Adám Brudzewsky doesn’t see this :joy: :sweat_smile: