Разница вывода при вызове string()

Я хочу объединить несколько переменных разных типов в строку. Это хорошо работает:

q)"select ", string[10:00:00] ," abc"
"select 10:00:00 abc"

Когда я вызываю строку со скобками, вывод отличается:

q)"select ", string(10:00:00) ," abc"
"s"
"e"
"l"
"e"
"c"
"t"
" "
"10:00:00"
," "
,"a"
,"b"
,"c"

Я думаю, что в первом примере строка функции вызывается с атомарным параметром типа time, а во втором вызове перед вызовом строки создается список времени.

Что показывает вывод во втором примере?


person Robert Kubrick    schedule 25.03.2013    source источник


Ответы (1)


С помощью string[10:00:00] вы вызываете строковую функцию на входе 10:00:00. Со строкой (10:00:00), "abc" вы фактически соединяете (10:00:00) с "abc", а затем связываете результаты. Вы должны помнить, что выполнение осуществляется справа налево.

q)(10:00:00) ," abc"
10:00:00
" "
"a"
"b"
"c"
q)string (10:00:00) ," abc"
"10:00:00"
," "
,"a"
,"b"
,"c"
person user1895961    schedule 25.03.2013
comment
Почему в обоих примерах результаты печатаются вертикально? Какие типы создаются каждой командой в вашем ответе? - person Robert Kubrick; 25.03.2013
comment
abc — это просто список из 4-х символьных элементов. Когда вы присоединяетесь к 10:00:00, вы создаете смешанный список из 5 элементов. q)count (10:00:00)," abc" (возвращает 5). Чтобы создать 2 списка списков, вам сначала нужно зачислить строку символов. q)count l:(10:00:00),enlist " abc" (возвращает 2). q)l (возвращает (10:00:00;abc)) - person user1895961; 25.03.2013
comment
Итак, запятые во втором выводе команды указывают на разные вызовы string(), по одному для каждого типа атома (а не список, как в результате первой команды). Я прав? - person Robert Kubrick; 25.03.2013