Interesting.  I didn't know about ≡.  That's helpful, but the issue you
raise with 'a' 'b' leaves us back to where I started.  There should be a
simple way for me to determine whether to do ⊂ or not.  I just haven't
figured out how.

I read that there was a big debate about what ⊂ does on a scalar.  I
suppose this is part of what I am running up against.  I'm sure the problem
can be solved with a bunch of loops and branches, but I was hoping there is
a clean APL way.

Thanks!

Blake



On Fri, May 9, 2014 at 10:05 AM, Elias Mårtenson <loke...@gmail.com> wrote:

> How would you do that? The problem here is that you as a person see 'foo'
> and think of it as a string in this context and that you want to match on
> it. However, the ∊ function sees an array of elements (those elements
> being characters) so it acts upon them.
>
> I suppose the best you can do would be to conditionally enclose the array
> if the depth is equal to 1. Something like:
>
>   →((≡X)≠1)/skip
>   X←⊂X
> skip:
>
> But I find that to be quite horrible for various reasons. One of those
> reasons being the fact that it would fail if you try to pass it the two
> strings: 'a' 'b'. This, of course, because 'a' is not a string at all, but
> a character.
>
> I certainly am not overly happy about the fact that a single-character
> string is in fact a character. I would find APL to be much more logical if
> 'a' was equivalent to ,'a'. But, it's not, so we'd better embrace it. :-)
>
> Regards,
> Elias
>
>
> On 9 May 2014 22:54, Blake McBride <blake1...@gmail.com> wrote:
>
>> Thanks for the tutorial.  In my case, however, I already knew that.  More
>> specifically, my problem is:
>>
>>  x←'hello' 'there' 'how' 'are' 'you'
>>
>> ∇r←test v
>> r←(⊂v)∊x
>> ∇
>>
>> This works for:
>>
>> test 'there'
>>
>> But doesn't work for:
>>
>> test 'there' 'are'
>>
>> I know I can remove the ⊂ for the second case.  I need a single line that
>> works in both cases, or a test for v so I can branch to the correct code.
>>
>> Thanks!
>>
>> Blake
>>
>>
>>
>> On Fri, May 9, 2014 at 9:19 AM, Elias Mårtenson <loke...@gmail.com>wrote:
>>
>>> I was very confused about this when I started learning APL too (well
>>> documented in this very mailing list's archive).
>>>
>>> What happens can be illustrated by boxing the output. Let's look at a
>>> string:
>>>
>>> *      8⎕CR 'foo'*
>>> ┌→──┐
>>> │foo│
>>> └───┘
>>> *      ⍴'foo'*
>>> 3
>>>
>>> In order words,this is a three-element array of characters. The third
>>> element of this array is the character 'o'.
>>>
>>> Here's another example:
>>>
>>> *      8⎕CR 'foo' 'bar' 'testing'*
>>> ┌→────────────────────┐
>>> │┌→──┐ ┌→──┐ ┌→──────┐│
>>> ││foo│ │bar│ │testing││
>>> │└───┘ └───┘ └───────┘│
>>> └∊────────────────────┘
>>> *      ⍴'foo' 'bar' 'testing'*
>>> 3
>>>
>>> This is a three-element array of arrays. The subarrays themselves has
>>> the dimensions 3, 3 and 7 respectively. The third element is the string
>>> 'testing'.
>>>
>>> Since the ∊ function matches each individual element, when passed the
>>> string 'foo' it will match each individual one. I.e, the characters 'f',
>>> 'o' and 'o'.
>>>
>>> Finally, let's look at what the enclose function does:
>>>
>>> *      8⎕CR ⊂'foo'*
>>> ┌─────┐
>>> │┌→──┐│
>>> ││foo││
>>> │└───┘│
>>> └∊────┘
>>> *      8⎕CR ⍴⊂'foo'*
>>> ┌⊖┐
>>> │0│
>>> └─┘
>>>
>>> What the function does is to encapsulate the argument into a single
>>> scalar. A scalar has no dimensions, as seen by the fact that ⍴ returned ⍬.
>>>
>>> Of course, you could also put the string inside a single-element array.
>>> Such array can be constructed as such:
>>>
>>> *      8⎕CR ,⊂'foo'*
>>> ┌→────┐
>>> │┌→──┐│
>>> ││foo││
>>> │└───┘│
>>> └∊────┘
>>> *      ⍴,⊂'foo'*
>>> 1
>>>
>>> The ∊ function will give identical results for that, since it interprets
>>> a scalar and a single-element array the same.
>>>
>>> I'm a beginner myself, so perhaps I made a mistake in my explanation.
>>> I'll leave it to others to fill in any information I have missed.
>>>
>>> Regards,
>>> Elias
>>>
>>>
>>> On 9 May 2014 20:07, Blake McBride <blake1...@gmail.com> wrote:
>>>
>>>> Greetings,
>>>>
>>>>
>>>> On Fri, May 9, 2014 at 12:10 AM, Daniel H. Leidisch <li...@leidisch.net
>>>> > wrote:
>>>>
>>>>> Hello!
>>>>>
>>>>> Blake McBride <blake1...@gmail.com>
>>>>> writes:
>>>>>
>>>>> > x←'abcd'  'efg'  'hijkl'
>>>>> >
>>>>> > Now, if I have:
>>>>> >
>>>>> > y←'hijkl'
>>>>> >
>>>>> > z←'hhh'
>>>>> >
>>>>> > How can I tell if y is in x?  How can I tell if z is in x?
>>>>>
>>>>> Or for both at once:
>>>>>
>>>>>       (y z)∊x
>>>>> 1 0
>>>>>
>>>>
>>>> I like this best, except:
>>>>
>>>> u←'abcd'
>>>> g←'ghjk'  'dsaw'
>>>>
>>>> g∊x   works. but I have to do:
>>>>
>>>> (⊂u)∊x
>>>>
>>>> but:
>>>>
>>>> u∊x doesn't work.
>>>>
>>>> the left side is being past as an argument to a function.  I don't know
>>>> if it is going to be a string array or a general array of strings.  I need
>>>> a way to work in either case.  (Sorry for the stupid questions.  I'm just
>>>> not straight with APL2 yest.)
>>>>
>>>> Thanks.
>>>>
>>>> Blake
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>>
>>>>>
>>>>> Regards,
>>>>>
>>>>> Daniel
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to