Я нашел странную проблему в q, возможную ошибку, я полагаю. я определил простую функцию, которая возвращает число с плавающей точкой, учитывая дату в качестве входных данных:Разница в поведении функции при вызове автономного или внутри запроса в q
give_dummy:{[the_date]
/// give_dummy[2013.05.10] // <- if u wanna test
:$[ the_date > 2013.01.01 ; 0.001 ; 0.002] ;
}
Она работает без проблем, если называется автономным:
q)give_dummy[2013.05.10]
0.001
Тем не менее, если я пытаюсь вызвать его в запросе я получаю сообщение об ошибке:
q)select give_dummy[date] from tab where sym = sec, i >= first_i , i < 4000
'type
Если я упрощаю функцию только вернуть (тождественную функцию) даты ввода, он работает в запросе. Если я упрощаю функцию, чтобы просто вернуть float, не сравнивая даты, он работает в запросе. Проблема возникает, когда я использую дату ввода для ее сравнения в if-statement: $ [the_date> 2013.01.01; 0,001; 0,002]
То же самое происходит, если я повторно определить функцию, принимая поплавка в качестве входных данных, а чем дата, а затем я пытаюсь дать цену в качестве входных данных в запросе:
give_dummy:{[the_price]
/// give_dummy[12] // <- if u wanna test
:$[ the_price > 20 ; 0.001 ; 0.002] ;
}
q) give_dummy[12]
0.002
q)select give_dummy[price] from tab where sym = sec, i >= first_i , i < 4000
'type
ли вы, есть какое-то представление о том, почему это происходит? Я пробовал все. Благодаря Marco
добавить, что если я пытаюсь вставить тривиальную Условный оператор в запросе, идентификатор не работает: выберите ($ [1> 0; 1; 0]), дату , price, volume from tab, где sym = sec 'rank –
Если я использую оператор? [;;] вместо $ [;;]. Это работает .. O_o –