bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-apl] Strange behaviour of ,/


From: Kacper Gutowski
Subject: Re: [Bug-apl] Strange behaviour of ,/
Date: Tue, 4 Feb 2014 15:48:19 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

On 2014-02-04 12:17:16, Elias Mårtenson wrote:
> When I look at the result from ,/1
> 2 3 it looks like an array that contains a single element: another array with
> the values 1 2 3 in it. But it isn't.

Technically you aren't wrong at all, it IS an array that contains a
single element.  But one-element arrays can come in many shapes.
Any array whose shape list consist of only ones is an “array that
contains a single element.”  For example if ⍴X ←→ 1 1 1 then X
contains only single element although it's 3-dimensional (its rank
⍴⍴X is 3).  In general, array X contains ×/⍴X elements, and, if
⍴X ←→ ,() then it also has one element (×/⍬ ←→ 1) but it is
zero-dimensional (⍴⍴X ←→ 0).  As Jay has written, you can't index it
because number of indices must match number of axes.

> But wait, I can take the first element from it:
> 
>           ↑,/1 2 3
>     1 2 3

First takes the first element of array's ravel list which is always
a vector (rank 1).  In other words, this works as you'd expect:

      (,,/1 2 3)[1]
 1 2 3 


Fact that scalars are rank zero arrays may be perplexing at first.
It sure was for me; in Matlab, for example, nothing can have rank
lower than 2, and therefore “vectors” come in two flavors (row and
column) and “scalars” are expressed as 1×1 matrices.
APL's approach is more consistent, though.  Vector has rank one and
scalar's rank is zero.

Note that every time you write one element literal, you're
creating a scalar not a single element vector:

      1 = ⍳1
1
      1 ≡ ⍳1
0
      1 ≡ ↑⍳1
1
      (,1) ≡ ⍳1
1
      ⍴⍴1
0
      ⍴⍴⍳1
1
      
      ⍴'ab'
2
      ⍴⍴'ab'
1
      ⍴'a'  ⍝ empty result
      ⍴⍴'a'
0
      ⍴,'a'
1


-k



reply via email to

[Prev in Thread] Current Thread [Next in Thread]