KDBでの関数と右解析


KDBでの関数と右解析
他の文章では、関数と解析文法の優先度を専門的に説明する必要はありません.プログラミングの基礎が少しあれば、明らかな理解と迅速なスキップができるからです.しかし、kdbを勉強し始めたばかりの人に対して、本節の内容を知らなければ、その後はきっとあちこちで穴を踏んで、苦しくてたまらないと思います.解析優先度は一般的にはあまり言及されていないか、一般言語のデフォルトは左解析であるが、KGBの右解析はその大きな特色であるため、専門的に筆墨を使う.
1.関数です.
(1)関数の定義:
f1:{[a;b]a+b}
f2:{[a;b]show "a+b=",(string a+b);a+b}
f3:{x+y}

ここでは、加算を定義する関数であり、パラメータaを入力し、パラメータbはそれらの和を返す.関数に複数の文がある場合に使用します.隔てて、戻ってきたものは入れません.それ以外の場合は空に戻ります.f 2のように.パラメータがx,yであれば,zはパラメータであることを強調する必要はなく,kdbは自動的に第1,第2,第3のパラメータ,例えばf 3とする.
(2)関数の呼び出し:
kdbの世界では書き方がふわふわしていて、好きなようにしています.
        f1[1;2]  

非常に正規の基準で、楷書のようです.
        f1[1]  2  

普通の道を歩かなくても、実行できます.まず1を最初のパラメータに与えた後のバイアス関数を2に渡す.
       f1[1][2] 

上記のようにバイアス関数である以上,関数でもあるので,当然中括弧伝達パラメータを用いてもよいし,中括弧を省くこともできる.
      f1[;2] 1 

2番目のパラメータをバイアス関数に転送してから、1番目のパラメータに転送します.
      f1 . 1 2   

家に着くふりをする...ポイントの操作については、後で専門の章で詳しく説明します.f1 . (1;2)と等価である.
     f1@1;2  

どうやって書くのか分からない.@の操作については後で専門の章が説明されます.
       (value `f1)[1;2]

この文の意味は、f 1の関数名からf 1の関数内容を取得する、パラメータ1と2に伝達することである.
kdbに内蔵されているいくつかの関数については、modのように左右に弓を開いて書くこともできます(.qネーミング空間の関数はこのように書くことができます).書いてもいいですよ
 mod[10;3]

は、1を返します.書いてもいいですよ
10 mod 3

は、1を返します.これは他の言語のキーワードのようなもので、関数ではなく、実は関数です.左を最初のパラメータ、右を2番目のパラメータとします.
記号は実は関数としても使えます:例えば+あなたは書くことができます
1+1 

書くこともできます
+[1;2]

または
+[;4] 1

思う存分発揮する...
inも関数です.
in (1;2)

は、1 bを返します.1 bはbool Trueという意味です.書いてもいいですよ
in[1;(1;2)]

または
in[;(1;2;3)] 1

または、
in[1;] (1;2;3)

すべて同じ意味です.
2.右解析.
以上のようにq言語を書くと自由に揮毫でき、拘束を求めないことが知られています.しかし、あまりにも乱れているkdb解析器も読めないのは天書よりも読みにくく、kdb+の解析器は右解析という原則しかありません.の右から左に読むと、括弧(大、中、小)を除いて優先度を変えることができ、他の風雨には支障がありません.
コード1:
 3-1+2

何を返しますか.4じゃなくて0!!!右解析はベジタリアンではありません...まず1+2を計算して3を減らします.のコード2:
-1+2

何に等しいですか.マイナス3ではありません.どうして今度は右解析じゃないの?単一のマイナス記号は一元関数ではないので、ここでは-1を全体とします.neg 1+2であれば-3です.negは単独で1元関数であるからです.コード3:
{x-y*x +y}[10;3]  

どれくらいですか?-29.右から左へ少し計算します...mod:{x-y*x div y}これは、前述したmod関数のkdbソースコードです.divは除算で整頓されています.
コード4:
"Hello",string `kdb,"Do you like me?" 

私たちが望んでいるわけではありません.
"Hello",(string `kdb),"Do you like me?"  

優先度が変わって、見栄えが良くなりました
()を打ちたくなければ、真ん中まで書いてから打つことに気づいたが、カーソルを戻したくない.次のようにします.
"Hello",string [`kdb],"Do you like me?"  

ここまでkdb+がどうしてこんなにスマートになったのか知っていますね.怠け者のためにサービスしています..kdbを書く人ほど怠け者はいない.