У меня есть массив 2x3
a =. 2 3 $ 2 3
a
2 3 2
3 2 3
И я хочу сложить все элементы вместе, используя +/, чтобы получить 15.
So
+/a
5 5 5
Хм. Это явное добавление столбцов. Я знаю, что +/rank равен _ _ _ (т. е. бесконечность), а a — это ранг 2. К сожалению, я не могу представить, почему он добавляет столбцы. (Я читаю "J для программистов C")
Так что просто для удовольствия я сделал:
+/"1 a
7 8
Итак, теперь он добавляет строки. Очевидно, я изменил ранг +/ на 1, что меньше 2 (ранг a), что означает... Я не знаю. Почему теперь я добавляю строки, переключая бесконечность формы на 1?
Что о
+/"0 a
2 3 2
3 2 3
Итак, теперь мы просто добавляем отдельные ячейки без ничего, чтобы получить массив, равный исходному a. Опять же, я не знаю, почему, хотя я могу почти запутаться в аргументе, чтобы добраться сюда: ранг глагола меньше, чем ранг (существительного), поэтому мы используем это значение, равное нулю, поэтому мы добавляем 0-ячеек, т.е. добавляем каждую ячейку по очереди индивидуально.
И еще раз на удачу:
+/"2 a
5 5 5
И я снова добавляю столбцы. Я не знаю механизма, который выбирает, какие строки/столбцы/ячейки добавляются при изменении ранга глагола. Мы добавляем столбцы, но, с моей точки зрения, мы могли бы так же легко добавлять строки.
Я хотел бы, чтобы это объяснили, если это возможно. Как я уже сказал, я читаю кое-какую литературу, но мне все еще тяжело.