I was experimenting with the Free Wolfram Engine today and tried the following problem:
"Count the number of elements in a list of 10 random integers between 0 and 199 that are greater than 100"
This worked in the free engine:
Total[Boole[Map[(#>100)&,RandomInteger[200,10],1]]]
A Dyalog equivalent is:
(+/>∘100) 10?200
One of the things that jumps out at me about how APL simplifies is that APL implicitly applies Map[] to right function arguments. And Boolean to Integer conversion is not needed. So nice. I love APL.
Mathematica and Dyalog
- Morten|Dyalog
- Posts: 460
- Joined: Tue Sep 09, 2008 3:52 pm
Re: Mathematica and Dyalog
Nice... Note that you can also write this in a couple of more direct ways :)
Code: Select all
+/100<10?200
100+.<10?200
- StefanoLanzavecchia
- Posts: 113
- Joined: Fri Oct 03, 2008 9:37 am
Re: Mathematica and Dyalog
Please notice that Mathematica's RandomInteger[max,n] returns n number in the range 0..max, possibly with repetitions, whereas dyadic deal (
x?y) returns a partial permutation of the array
⍳y. https://aplwiki.com/wiki/Deal. To replicate the behaviour of Mathematica's RandomInteger just apply roll (?x) to n copies of x:
?n⍴x.
Re: Mathematica and Dyalog
I had stumbled on that (reversing the comparison order) earlier, but I had also just watched Marshall Lochbaum's presentation on Tacit techniques to Dyalog'19. So I was thinking about sacrificing some conciseness to preserve the original problem context for the non-expert code reader (me). I've noticed that John Scholes addressed this trade-off with liberal use of comments.Morten|Dyalog wrote:Nice... Note that you can also write this in a couple of more direct ways :)
Code: Select all
+/100<10?200 100+.<10?200
It occurred to me that the conciseness offered by Dyalog and tacit techniques over Mathematica can actually improve comprehension of the original problem context. Of course, comprehensibility depends on the experience and skill level of the reader. Over the decades, the Dyalog team has skillfully balanced technical and communication techniques (what I think Iverson as a teacher intended) for the skill level of the intended audience.
Thank-you. Well done.
Re: Mathematica and Dyalog
Good catch!StefanoLanzavecchia wrote:Please notice that Mathematica's RandomInteger[max,n] returns n number in the range 0..max, possibly with repetitions, whereas dyadic deal (x?y) returns a partial permutation of the array⍳y. https://aplwiki.com/wiki/Deal. To replicate the behaviour of Mathematica's RandomInteger just apply roll (?x) to n copies of x:?n⍴x.