Принудительный массив вместо матрицы в J для «я». - PullRequest
3 голосов
/ 17 мая 2011

Примитив i. создает список целых чисел:

   i. 10
0 1 2 3 4 5 6 7 8 9

Если я хочу создать несколько коротких списков подряд, я делаю это:

   ;i."0 each [ 2 3 4
0 1 0 1 2 0 1 2 3

(результат, который я хочу)

Бокс (это each) - это костыль, потому что без него i."0 производит матрицу.

   i."0 [ 2 3 4
0 1 0 0
0 1 2 0
0 1 2 3

(результат, который я не хочу)

Есть ли лучший способ, чтобы i."0 не форматировал вывод в матрицу, а в массив?

1 Ответ

1 голос
/ 18 мая 2011

Нет, я считаю, что вы не можете добиться большего успеха, чем ваше текущее решение.i."0 не может вернуть вектор.

Наречие "0 заставляет i. принимать скаляры, а i. возвращает векторы.i. не может знать, что ваши входные данные были вектором, а не скаляром.В соответствии с J-праймером форма результата - это объединение фрейма аргумента и результата.

Самое короткое «безбоксовое» решение, которое я нашел до сих пор, -

(*@$"0~#&,i."0) 2 3 4

, что все же дольше, чем просто использование ;i. each 2 3 4

...