bug-apl
[Top][All Lists]
Advanced

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

Re: [Bug-apl] box and unbox that work uniformly and without exceptions


From: Blake McBride
Subject: Re: [Bug-apl] box and unbox that work uniformly and without exceptions
Date: Mon, 19 May 2014 23:44:16 -0500

Dear Fred,

While your code does help in one area, it has a problem in another, i.e.:
      gg←,'' 'a' 'b'
      ⍴gg
3

Your code says there are three but to the programmer there are only two.  The '' is just there to make the rest work.  I suppose you can just remember that and change your indexes everywhere and hope someone else reading the code gets it.

Also, in:

( unbox unbox unbox box box box 6 ) ≡ ⊃ ⊃ ⊃ ⊂ ⊂ ⊂ 6

They are not equivalent at all.  Each box adds additional levels of nesting as the programmer is specifying.  Each ⊂ above is a null function.  This is actually the main point.  box always gives you an additional level of nesting regardless of data.  ⊂ always gives you an additional level of nesting unless your data happens to be a scalar.  What you end up with is dependent on the data.  It is almost like saying that:

x times y gives the result of multiplying x by y, unless x is 88 then we add.

The operation shouldn't be dependent on the data.

Additionally, you would have to either encapsulate your idiom into a function or remember the extra steps everywhere - and remember when to use it and when not to use it.

I am sure there are many ways to skin a cat, or solve this problem.  I think mine is cleaner.

Thanks for your input!

Blake




On Mon, May 19, 2014 at 10:34 PM, Frederick H. Pitts <address@hidden> wrote:
Blake,

        Since box and unbox are implemented directly in terms of enclose and
disclose, I have to believe that the latter can handle the parameters
you require and in a less verbose fashion.

        Consider the following code:

      gg ← ,'' 'a' 'b'
      gg
┌→─────┐
│┌⊖┐ ab│
││ │   │
│└─┘   │
└∊─────┘
      hh ← ,'' 'ab'
      hh
┌→───────┐
│┌⊖┐ ┌→─┐│
││ │ │ab││
│└─┘ └──┘│
└∊───────┘

        If the first element of a nested array is a vector, any vector,
subsequent scalar character elements remain scalar and are not coalesced
into a vector.  hh is presented to highlight the difference between a
sequence of scalar character elements and a character vector.  There are
3 elements in gg and only 2 in hh.  I'm of the opinion that box/unbox
work because the box function stuffs a vector in the first element of
the nested array.  If not, sequential homogeneous scalars are going to
be coalesced to form a vector element.  A requirement for a nested array
to exist is that it contain at least one vector element.  The remaining
elements can be scalar.  enclose is not going to produce a nested array
unless a vector element is supplied and if one is not supplied, enclose
will attempt to create one.

        Please consider the attached code.  It demonstrates that enclose
(actually implicit enclose), dyadic pick and parallel assignment can
more succinctly do what the box/unbox pair do, but admittedly at the
slight complication of having to supply and account for the vector first
element in the nested array and its nested array elements.  That
complication seems a small price to pay for not having to box and unbox
every element of a nested array.

Regards,

Fred
Retired Chemical Engineer


reply via email to

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