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