2016-12-29 6 views
3

ない私は、以下の文で何が起こっているかを理解したい:KDB - どのように「どこ」関数の仕事は

sum(til 100) where 000011110000b 

ラインは22と評価され、私はその理由を把握することができないことをします。 sum(til 100)4950です。 where 000011110000bはリスト4 5 6 7を返します。 kdbのリファレンスページは、このユースケースを説明していないようです。なぜ上記の行は22と評価されますか?

また、なぜ下の行の結果が

4950 where 000011110000b 

答えて

3

角カッコは、関数呼び出しの引数ではなく、括弧のために使用されているエラーで行います。したがって、上記のように解釈されている:

sum[(til 100) where 000011110000b] 

そして、それが22に評価する理由、それはリストtil 100の第五、第六、第七、第八値、すなわち(の和である。すなわち、あなたはおそらく、今見ることができます0 ... 99)、whereはあなたが気づいているうように関数を呼び出すとき、あなたは角括弧を省略することができ000011110000b

q)til[100] where 000011110000b 
4 5 6 7 

ブール・リストを使用してtil 100にインデックス付けされているので、そうするときは、意図したとおりに解析/解釈されることを確認する必要があります。一般に、コードはの右から左にと評価されます。この場合、(til 100) where 000011110000bが最初に評価され、その結果がsum関数に渡されます。

についてもう一度右から左に考えると、通訳者はwhere 000011110000bの結果を関数4590に渡そうとしています。 4590はkdbの名前付き関数ではありませんが、これはIPC、つまりTCPを介して他のkdbプロセスでコマンドを実行するために使用される形式です。したがって、コマンドwhere 000011110000bを実行するために、OSファイル記述子番号4590(ほとんどの場合、有効なTCP接続に対応しない)を使用するようkdbに指示しています。詳しくは、「メッセージフォーマット」のセクションをご覧ください。 http://code.kx.com/q/tutorials/startingq/ipc/

関連する問題