J'ai trouvé un problème étrange dans q, un bug possible je suppose. J'ai défini une fonction simple qui retourne un flotteur, donné une date d'entrée:Différence dans le comportement de la fonction lorsqu'elle est appelée de manière autonome ou à l'intérieur d'une requête dans q
give_dummy:{[the_date]
/// give_dummy[2013.05.10] // <- if u wanna test
:$[ the_date > 2013.01.01 ; 0.001 ; 0.002] ;
}
Il fonctionne sans problème si elle est appelée autonome:
q)give_dummy[2013.05.10]
0.001
Néanmoins, si je tente de l'appeler dans une requête que je reçois une erreur:
q)select give_dummy[date] from tab where sym = sec, i >= first_i , i < 4000
'type
Si je simplifie la fonction de revenir juste la date d'entrée (fonction d'identité), cela fonctionne dans la requête. Si je simplifie la fonction de retourner simplement un flottant, sans comparer les dates, cela fonctionne dans la requête. Le problème se pose lorsque j'utilise la date d'entrée pour la comparer dans l'instruction if: $ [the_date> 2013.01.01; 0,001; 0,002]
La même chose se produit si je Redéfinir la fonction prenant un flotteur en entrée, au lieu d'une date, puis je tente de donner le prix en entrée dans la requête:
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
-vous avoir une idée de pourquoi cela arrive? J'ai tout essayé. Merci Marco
J'ajoute que si j'essaie d'insérer une instruction if triviale dans une requête, l'ID ne fonctionne pas: select ($ [1> 0; 1; 0]), date , prix, volume de l'onglet où sym = sec 'rank –
Si j'utilise l'instruction? [;;], au lieu de $ [;;]. Cela fonctionne .. O_o –