内部に別の関数を含む関数を定義しています:
find_badTicks:{ [tab;sec] // dummy function, for debug..
Ndays: 10i ;
dates: select distinct date from tab where sym = sec ;
closures: select last price by date from tab where sym = sec ;
returns: 1 _ select ( (price)-(prev price) )%(prev price) from closures ;
stdevs: {[x;y] sd[ (Ndays-1)#y _ x ] } [ (returns)[;`price] ] each til ( (1 - (Ndays-1)) + count (returns)[;`price] ) ;
:tab
}
関数をコンパイルすると、機能します。行を1つずつ実行すると機能します。ただし、関数を呼び出そうとすると、エラーが発生します。
q)testTab: find_badTicks [testTab ; `ENI.IM.Equity] ;
'Ndays
ネストされた関数で Ndays を削除し、明示的に 10 を記述すると、機能します。関数の実行時に、ネストされた関数内のローカル変数の可視性の問題だと思います。つまり、ネストされた関数は、関数 find_badTicks のローカル変数である Ndays を認識できません。内部関数内で Ndays を表示する方法を知っていますか? ありがとうマルコ