## Mathematica and Dyalog

For users of dfns, both novice and expert

### Mathematica and Dyalog

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.
mwr0707

Posts: 17
Joined: Wed Oct 28, 2015 9:49 am

### Re: Mathematica and Dyalog

Nice... Note that you can also write this in a couple of more direct ways :)

Code: Select all
`+/100<10?200100+.<10?200`

Morten|Dyalog

Posts: 458
Joined: Tue Sep 09, 2008 3:52 pm

### 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`
.

StefanoLanzavecchia

Posts: 110
Joined: Fri Oct 03, 2008 9:37 am

### Re: Mathematica and Dyalog

Morten|Dyalog wrote:Nice... Note that you can also write this in a couple of more direct ways :)

Code: Select all
`+/100<10?200100+.<10?200`

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.

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.
mwr0707

Posts: 17
Joined: Wed Oct 28, 2015 9:49 am

### Re: Mathematica and Dyalog

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`
.

Good catch!
mwr0707

Posts: 17
Joined: Wed Oct 28, 2015 9:49 am

### Who is online

Users browsing this forum: No registered users and 1 guest