Thank you. That makes sense.

Jürgen, I was referring to the ISO spec. I noticed that J has somehow
generalised the join operation so that the / has to be explicit. That
surely makes it more flexible, but I'm not sure what you can do with it, to
I turned to the spec.

Regards,
Elias

On Tue, 14 Apr 2020 at 17:51, Jay Foad <jay.f...@gmail.com> wrote:

> s/join/product/ ?
>
> In APL's inner product (X a.b Y), each item of the result corresponds to a
> row of X combined in some way with a column of Y. So the shape of the
> result is (¯1↓⍴X),(1↓⍴Y).
>
> In APL's outer product (X ∘.b Y), each item of the result corresponds to
> an item of X combined in some way with an item of Y. So the shape of the
> result is (⍴X),(⍴Y).
>
> J probably does this in a more generic way, and you can certainly
> implement inner and outer products and variations thereof by using the Rank
> operator. For example:
> X (b⍤99⍤0 99) Y  ⍝ implements X ∘.b Y (where 99 is an approximation to
> infinity)
> X({+⌿⍺(×⍤¯1)⍵}⍤1 99)Y ⍝ implements X +.× Y
>
> Jay.
>
> On Tue, 14 Apr 2020 at 05:07, Elias Mårtenson <loke...@gmail.com> wrote:
>
>> I was reading the spec on outer join to see if I could finally fully
>> understand how it works.
>>
>> For reference, the spec refers to the syntax as follows:
>>
>>     X a.b Y
>>
>> The function a is referenced twice in the description for this function,
>> both times in the form a/ (i.e. with the reduce operator applied).
>>
>> I then noted that the J version of this function does not apply the
>> reduce operator. I.e. in J, you have to do:
>>
>>     X a/.b Y
>>
>> Now, am I correct in my assumption that with this change, there would be
>> no need for the ∘ (null function)? I.e. if APL behaved like J, would the
>> following achieve an outer join?
>>
>>     X ⊣.× Y
>>
>> I'm still not sure I fully understand the join operator to the point
>> where I can answer this question.
>>
>> Regards,
>> Elias
>>
>

Reply via email to