成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

4. Q語(yǔ)言學(xué)習(xí)之路— Operators

GT / 2094人閱讀

摘要:作用于任意兩個(gè)元素,當(dāng)兩個(gè)元素相同時(shí)返回不同時(shí)返回。但對(duì)于日期類(lèi)型,比較的是時(shí)間上的先后關(guān)系,而不是其值對(duì)于元素的對(duì)比,語(yǔ)言的容限是。

0. "Operators and Verbs Are Functions"

在q中,操作符(Operators)又稱(chēng)為動(dòng)詞(Verbs), 讀表達(dá)式3+2按照從右到左的順序:3 被加到 2,其中3是一個(gè)名詞(主語(yǔ)),操作符+是一個(gè)動(dòng)詞,2是一個(gè)名詞(賓語(yǔ))。

1. 函數(shù)標(biāo)識(shí)

下面介紹三種以后常見(jiàn)的函數(shù)分類(lèi):
monadic函數(shù): f[x] 或者 f x
dyadic函數(shù): g[x;y] 或者 x g y
atomic函數(shù): 作用于數(shù)據(jù)結(jié)構(gòu)的那個(gè)元素

例如+是一個(gè)dyadic函數(shù),它有如下兩種表達(dá)方法,都是等價(jià)的:

q) 2+3
q) +[2;3]

第二個(gè)式子很神奇,類(lèi)似的表達(dá)方式還有:

q)=[2;3]
0b

更神奇的是,可以將二元運(yùn)算符的前綴和中綴組合在一起:
q)(2+)[3]
5
q)(2+)3
5

2. atomic函數(shù)的拓展
用法見(jiàn)如下幾個(gè)例子, 比較容易理解:

q)neg 1 2 3
-1 -2 -3
q)1 2 3+10 20 30
11 22 33
q)1 2 3+10 20 30 40
"length
q)100+1 2 3
101 102 103
q)1 2 3+100
101 102 103
1. 運(yùn)算符優(yōu)先級(jí)
沒(méi)有運(yùn)算符優(yōu)先級(jí)!

1. Left-of-Right解讀方法
由于q語(yǔ)言沒(méi)有運(yùn)算符優(yōu)先級(jí),但是有一個(gè)簡(jiǎn)單的法則來(lái)解讀任何表達(dá)式:

Expressions are evaluated left-of-right
which equates to
Expressions are evaluated right-to-left

類(lèi)似于解讀復(fù)合函數(shù)f(g(x)), 可以被解讀為f of g of x, 同樣可以被解讀為x to g to f。

注意: 當(dāng)表達(dá)式的結(jié)果是中綴運(yùn)算符的左操作元時(shí),必須對(duì)該表達(dá)式加括號(hào),否則中綴運(yùn)算符會(huì)作用在表達(dá)式最右邊的一個(gè)元素上。如下例所示:

q)2*3+4
14
q)(2*3)+4
10
q)4+2*3
10

2. 沒(méi)有運(yùn)算符優(yōu)先級(jí)的原因

運(yùn)算符優(yōu)先級(jí)的開(kāi)銷(xiāo)較大,只有當(dāng)解析完整個(gè)表達(dá)式后才能開(kāi)始計(jì)算

操作符的優(yōu)先級(jí)往往會(huì)被括號(hào)所覆蓋

一些編程語(yǔ)言允許用戶自定義dyadic運(yùn)算符,這就需要拓展運(yùn)算符的優(yōu)先級(jí)別來(lái)cover用戶定義的運(yùn)算符,這就導(dǎo)致了復(fù)雜性。

2. Match

作用于任意兩個(gè)q元素,當(dāng)兩個(gè)元素相同(identical)時(shí)返回1b, 不同時(shí)返回0b。對(duì)于相互match的兩個(gè)元素,它們需要同樣的類(lèi)型,同樣的大小,同樣的值, 但也可能占據(jù)不同的儲(chǔ)存空間,這也意味著,拷貝項(xiàng)在q中被認(rèn)為是相同的。

q)42~40+2
1b
q)42~42h
0b
q)42f~42.0
1b
q)42~`42
0b
q)`42~"42"
0b
q)4 2~2 4
0b
q)42~(4 2;(1 0))
0b
q)(4 2)~(4;2*1)
1b
q)(())~enlist ()
0b
q)(1; 2 3 4)~(1; (2; 3; 4))
1b
q)(1 2;3 4)~(1;2 3 4)
0b
3. 相等和關(guān)系運(yùn)算符

1. 相等=和不等<>
相等運(yùn)算符=和Match運(yùn)算符~不同之處在于,相等運(yùn)算符=atom-wise的,即atomic函數(shù)。

相等運(yùn)算符校驗(yàn)的是兩個(gè)元素是否是值相等的,并不管元素的類(lèi)型:

q)42=42i
1b
q)42=42.0
1b
q)42=0x42
0b
q)42="*"
1b

最后一項(xiàng)說(shuō)明了,char "*"的underlying值和42的underlying值是一樣的。

但對(duì)于日期類(lèi)型,比較的是時(shí)間上的先后關(guān)系,而不是其underlying值

q)2000.01.01=2000.01.01D00:00:00.000000000
1b
q)2015.01.01<2015.02m
1b
q)12:00:00=12:00:00.000
1b

對(duì)于float元素的對(duì)比,q語(yǔ)言的容限是10^-14

2. 非零 not
如果對(duì)應(yīng)元素的underlying值是0,則返回1b;否則返回0b。

對(duì)于char類(lèi)型,"