Starting a new thread from
http://jsoftware.com/pipermail/programming/2014-January/034594.html
for better future searching and more relevant subject

On Fri, Jan 17, 2014 at 5:52 AM, Raul Miller <rauldmil...@gmail.com> wrote
> Have you seen the wikipedia entry on rank?
> http://en.wikipedia.org/wiki/Rank_(J_programming_language)

Yes, that's been helpful in the past. Thank you for writing and
sharing it.  It would be useful to add language for infinite rank,
which seems to be what I'm tripping up on.

  '=:' splitstring each ('a=:b';'c=:dz')
┌──────┬───────┐
│┌─┬──┐│┌──┬──┐│
││a│:b│││c=│dz││
│└─┴──┘│└──┴──┘│
└──────┴───────┘

I have a solution that seems more appropriate, to bond the left
argument to splitstring to create a monad

 '=:'&splitstring each ('a=:b';'c=:dz')
┌─────┬──────┐
│┌─┬─┐│┌─┬──┐│
││a│b│││c│dz││
│└─┴─┘│└─┴──┘│
└─────┴──────┘

Going back to the faulty one, I'm seeking to understand why it does that:

splitstring has infinite rank

splitstring b. 0
_ _ _

Something is triggering it to operate like this:

for(i = 0; i<leftLength;i++) {
left[i] splitstring right[i]
}

'=' splitstring 'a=:b'
':' splitstring 'c=:dz'

This can be demonstrated by doing this:

'=:z' splitstring each ('a=:b';'f=:m')
|length error
| '=:z' splitstring each('a=:b';'f=:m')

Which fails because the left shape is greater than the right shape.

If I try to look at the rank of each, that doesn't work:

each b. 0
|syntax error
| each b.0

each is an adverb created with the &. conjunction

The dictionary[1] says:

"The verb u &.v is equivalent to the composition u & v except that the
verb obverse to v is applied to the result for each cell. That is
(subject to the monadic rank of v)"

This looks like it came up at a NYCJUG[2]

"It doesn’t work – why?  Based on the shape of the result, we might
suspect a problem with rank.  Unfortunately, we can’t specify the rank
of an adverb:"

If I understand the dictionary correctly, it will use the rank of the
verb, which for each is >. > has a rank 0 0 0.

> b. 0
0 0 0

As a more simple example, it looks like it's doing something like this:

'=:' ,"0 0 1 'bbcc'
=bbcc
:bbcc

Rank for the monad case (−y is an example of using − as a monad)
Rank for the left argument for the dyad case (x−y is an example of
using − as a dyad)
Rank for the right argument for the dyad case

Can anyone shed some light on why   '=:' splitstring each
('a=:b';'c=:dz') is applying its left argument iteratively to the
right argument?  Am I on the right path with this analysis?


[1] - http://www.jsoftware.com/help/dictionary/d631.htm
[2] - http://www.jsoftware.com/jwiki/NYCJUG/2013-01-08
[3] - http://en.wikipedia.org/wiki/Rank_(J_programming_language)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to