Почему на мою переменную не влияют определенные встроенные функции, если она хранит данные, прочитанные из файла? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть файл с именем 01.in, в той же папке я запускаю q. Он содержит одну строку, в которой есть строка цифр. Например, предположим, что он содержит следующую строку: 1122.

Я прочитал данные из этого файла, преобразовал их в список целых чисел и сохранил их в переменной a, используя следующую строку:

a:("i"$read0 `:01.in)-"i"$"0"

Теперь, если я попытаюсь использовать некоторые встроенные двоичные функции, такие как xprev или rotate, интерпретатор q не выдаст ничего или исходный список. Например:

q)a
1 1 2 2
q)-1 xprev a

q)0 xprev a
1 1 2 2
q)1 xprev a

q)-1 rotate a
1 1 2 2
q)0 rotate a
1 1 2 2
q)1 rotate a
1 1 2 2

Те же функции работают, если я использую их в списке 1 1 2 2 напрямую. Я пытаюсь понять, почему то, что я делаю, не работает так, как я ожидал. Просто наперед: я очень новичок в q, поэтому я прошу прощения, если это что-то очевидное, что я пропустил.

1 Ответ

0 голосов
/ 30 апреля 2018

При чтении файла вы создаете вложенный список:

q)type a
0h
q)0N!a;
,1 1 2 2i

Здесь я использую 0N!, чтобы показать необработанную структуру, , указывает, что это вложенный список. Вместо этого попробуйте прочитать что-то вроде этого:

q)a:"I"$'first read0`:01.in
q)a
1 1 2 2i
q)-1 xprev a
1 2 2 0Ni
...