Blake, APL is actually quite consistent. What you are complaining about is the fact that the *parser* interprets 'x' as a character, as opposed to a one-character string. I agree this can be confusing.
It's all a syntax thing, once your text has been read into the interpreter, characters vs. strings are completely consistent. To work around this inconsistency there is really only a single rule to keep in mind: *When specifying a one-character string in source, type ,'x' instead of 'x'* That's really all there is to it. Again, once your text has been processed, APL itself is consistent. Personally, I'd have preferred to have 'x' result in a string and some other syntax, say #\x like in Lisp, or something like that. Regards, Elias On 12 May 2014 23:11, Blake McBride <blake1...@gmail.com> wrote: > '333' '55555' is shorthand for (⊂'333'), ⊂'55555' and would give you what > it does now (presuming neither is a scalar!!) > > ⊃'333' '55555' would be meaningless because you'd end up with two > independent values. APL deals with one at a time. > > You could do: ⊃('333' '55555')[1] to give '333' > > Perhaps something like (a b)←⊃'333' '55555' might make sense. > > APL is not valuable because every imaginable sequence produces some > non-error. I had a simple problem which would have been trivial to solve > if nested arrays worked in a straight forward way. I believe you were the > person that pointed out that: > > '22' '22' > '333 '333' > '4444' '4444' > '55555' '55555' > '22' 5 5⍴⍳25 > > are all treated in a consistent fashion, but: > > '1' '1' > > is treated differently. That means, in order to get consistent behavior, > one has to have special case code all over the place. Look at all the > gyrations David was going through trying to make it work consistently. > > Perhaps there is some logic behind how it works. It is just impossible to > work with in straight forward cases, and wherever their logic applies is > beyond my ability to comprehend. > > Thanks. > > Blake > > > > > On Mon, May 12, 2014 at 9:50 AM, Elias Mårtenson <loke...@gmail.com>wrote: > >> The only way to make it more consistent is to make behaviours that today >> are allowed into an error. >> >> What would you expect ⊃'333' '55555' to do? >> >> Regards, >> Elias >> >> >> On 12 May 2014 22:43, Blake McBride <blake1...@gmail.com> wrote: >> >>> Thanks. I have to say, with no reflection on present company, I am >>> about as frustrated and disgusted with nested arrays, as defined by IBM, as >>> I could be. Having enclose do one thing for all arrays and another for >>> scalars has caused me endless hours of frustration. (Isn't a scalar just a >>> zero dimension array?) How much time has one to spend making enclose do >>> what comes naturally to ones mind? Now I find that disclose actually >>> modifies data beyond the ability to reconstruct it. In your example, if >>> one string were a different length than the other, APL will lengthen it to >>> match the longest upon disclose. The original length of each string is >>> lost forever. Why stop there? Why not change a 4 to a 7? >>> >>> Having enclose and disclose uniformly add and remove layers of boxing >>> only is simple, consistent, predictable, useful, and easy to understand. >>> If I add 3 and then subtract 3 I end up with the same number. But if I >>> enclose and then disclose, I end up with something different - sometimes. >>> Imagine that! >>> >>> '333' '55555' >>> ┌→────────────┐ >>> │┌→──┐ ┌→────┐│ >>> ││333│ │55555││ >>> │└───┘ └─────┘│ >>> └∊────────────┘ >>> ⊃'333' '55555' >>> ┌→────┐ >>> ↓333 │ >>> │55555│ >>> └─────┘ >>> (⊃'333' '55555')[1;] >>> ┌→────┐ >>> │333 │ >>> └─────┘ >>> ⍴(⊃'333' '55555')[1;] >>> ┌→┐ >>> │5│ >>> └─┘ >>> >>> >>> There are ways to rationalize almost anything. IMO, the IBM nested >>> array approach is confusing, unpredictable, and renders it a tool of very >>> careful last resort. >>> >>> I know there has been debate about this in the past, and I am not >>> looking to resurrect it. It is a real shame IBM chose the path it chose. >>> >>> Blake >>> >>> >>> >>> On Mon, May 12, 2014 at 5:08 AM, Jay Foad <jay.f...@gmail.com> wrote: >>> >>>> APL2's Disclose (Dyalog calls it Mix) will convert a vector of vectors >>>> into a matrix: >>>> >>>> ⊃'timor' 'mortis' >>>> ┌→─────┐ >>>> ↓timor │ >>>> │mortis│ >>>> └──────┘ >>>> >>>> Your second application of Disclose is applied to a 1-vector of >>>> 1-vectors (,⊂,7), so it returns a 1x1 matrix. >>>> >>>> Jay. >>>> >>>> On 12 May 2014 06:03, Blake McBride <blake1...@gmail.com> wrote: >>>> > ⊃⊃⊂,⊂,7 >>>> > ┌→┐ >>>> > ↓7│ >>>> > └─┘ >>>> > ⍴⊃⊃⊂,⊂,7 >>>> > ┌→──┐ >>>> > │1 1│ >>>> > └───┘ >>>> > >>>> >>> >>> >> >