q語言的函式

lt發表於2016-06-28

函式定義規範:函式名:{函式體}
如果有返回值,則函式體最後一個表示式是值.
預設引數名是x,如果多個引數,則按xyz順序。
如果不用預設引數名,則用
函式名:{[引數名] 函式體}的格式,

比如

f:{x+1}
f1:{[p1] p1+1}
f2:{[p1;p2],p1-p2}

函式的呼叫方法:
函式名[引數],每個引數之間用;隔開。如果只有1個引數,[]可以省去。
比如:

q)f:{x+1} //預設引數名
q)f[1]
2
q)f(3) //這個()只是把3括起來,相當於f 3或f [(3)]
4
q)f1:{[p1] p1+1}  //指定引數名
q)f1[2]
3
q)f2:{[p1;p2] p1-p2} //指定2個引數名
q)f2[3;4]
-1
q)f 3
4
q)f2 3;40 //這裡的;不是分隔引數,而是分隔表示式
40

有時候呼叫函式採取f[引數][引數]的形式,這在q裡面稱為投影。比如

q)f2[3;][4]
-1

的含義是,把第1個引數固定為3,第2個引數為4,它的等價寫法是f2[3][4],因為尾隨的;可以省略。而

q)f2[;3][4]
1

的含義是,把第2個引數固定為3,第1個引數為4。非尾隨的;不可以省略。

q語言沒有取字串子串的函式,自己寫了一個:

q)substr:{len:count x;x:(y-1)_x;x:(y+z-len+1)_x}
q)substr["123456";3;2]
"34"

相關文章