国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

4. Q語言學習之路— Operators

GT / 2057人閱讀

摘要:作用于任意兩個元素,當兩個元素相同時返回不同時返回。但對于日期類型,比較的是時間上的先后關系,而不是其值對于元素的對比,語言的容限是。

0. "Operators and Verbs Are Functions"

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

1. 函數標識

下面介紹三種以后常見的函數分類:
monadic函數: f[x] 或者 f x
dyadic函數: g[x;y] 或者 x g y
atomic函數: 作用于數據結構的那個元素

例如+是一個dyadic函數,它有如下兩種表達方法,都是等價的:

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

第二個式子很神奇,類似的表達方式還有:

q)=[2;3]
0b

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

2. atomic函數的拓展
用法見如下幾個例子, 比較容易理解:

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. 運算符優先級
沒有運算符優先級!

1. Left-of-Right解讀方法
由于q語言沒有運算符優先級,但是有一個簡單的法則來解讀任何表達式:

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

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

注意: 當表達式的結果是中綴運算符的左操作元時,必須對該表達式加括號,否則中綴運算符會作用在表達式最右邊的一個元素上。如下例所示:

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

2. 沒有運算符優先級的原因

運算符優先級的開銷較大,只有當解析完整個表達式后才能開始計算

操作符的優先級往往會被括號所覆蓋

一些編程語言允許用戶自定義dyadic運算符,這就需要拓展運算符的優先級別來cover用戶定義的運算符,這就導致了復雜性。

2. Match

作用于任意兩個q元素,當兩個元素相同(identical)時返回1b, 不同時返回0b。對于相互match的兩個元素,它們需要同樣的類型,同樣的大小,同樣的值, 但也可能占據不同的儲存空間,這也意味著,拷貝項在q中被認為是相同的。

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. 相等和關系運算符

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

相等運算符校驗的是兩個元素是否是值相等的,并不管元素的類型:

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

最后一項說明了,char "*"的underlying值和42的underlying值是一樣的。

但對于日期類型,比較的是時間上的先后關系,而不是其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

對于float元素的對比,q語言的容限是10^-14

2. 非零 not
如果對應元素的underlying值是0,則返回1b;否則返回0b。

對于char類型,"