Это один, который кусает все сейчас и потом, и это приводит, потому что
5 =+/I. v
на самом деле I. действует на V, то результат находится под действием + /, то этот результат сверяется 5, используя = сравнение. Поэтому, когда мы определяем
indexsumtest =: =+/I.
мы получаем
5 indexsumtest v
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
потому indexsumtest была определена как молчаливое глаголом, который обрабатывает свои аргументы как разветвление, как предложил MPelletier. Другими словами, вы на самом деле не получаете = +/I. вместо indexsumtest вы получаете (= +/I.), который является 3-х глагольным fork, где первый и третий глаголы принимают оба аргумента, а результат каждого отправляется в +/в центре.
MPelletier также предполагает, что молчаливое форма, которая делает то, что вы хотите, это
[ = [: +/ [: I. ]
, который будет работать и на самом деле создается J, если вы измените свое определение 13
indexsumtest =: 13 : 'x =+/I. y'
indexsumtest
[ = [: +/ [: I. ]
Yep, что правильно, J действительно сделает для вас самые негласные преобразования, если вы используете определение 13: для определения. Довольно круто, а? Единственная проблема заключается в том, что в этом автоматическом поколении он не использует крючки, которые могут упростить код. Крючок представляет собой комбинацию из двух глаголов, которая имеет правильный глагол для правильного аргумента, и результат используется как правый аргумент для левого глагола, который использует левый аргумент в двоичном случае (или исходный правый аргумент в монадическом случае) ,
При х и у левые и правые аргументы и у и v имеют первые и вторые глаголы затем
x (u v) y
становится x u (v y)
или в монадических случае
(u v) y
становится y u (v y)
Если вы все еще со мной (хорошо для вас!), Это означает, что мы можем использовать крючок, чтобы упростить молчание, если мы установим u в = и v в +/@ I. (@ - это соединение, которое объединяет +/и I. и делает их работающими как один глагол). Таким образом, в конце концов
indexsumtacit =: = +/@I.
5 indexsumtacit v
1
Как mindbending, как J, когда вы начинаете, это очень аккуратным, когда вы понимаете правила, которые он играет на, а затем начать, чтобы получить их, чтобы сделать ваши ставки. Надеюсь это поможет.
Я думаю, что понял. Но в определении диадического глагола, что представляют собой 4:? то есть indexsumtest =: 4: 'x = +/I. y ' –
Он представляет собой ... двоичный! См. Http://www.jsoftware.com/help/dictionary/d310n.htm. Краткая форма определения глагола - '3: '...'' или '4: '...'', длинная форма на нескольких строки начинаются с '3: 0' или' 4: 0' и продолжаются в следующих строках до первой строки с одиночной закрывающейся скобкой ')'. – MPelletier
Недавно я начал изучать J, но считаю, что первый сегмент вашего ответа неверен. '%' выполняется против результата '#' и '+ /', который просто делит результат суммы и количества элементов. –