- 論壇徽章:
- 0
|
Haskell 可以這樣綁定,一舉三得
- Prelude> let xss@(x:xs) = [1, 2, 3, 4]
- Prelude> xss
- [1,2,3,4]
- Prelude> x
- 1
- Prelude> xs
- [2,3,4]
復(fù)制代碼
以前一直認(rèn)為這種寫法只是用在 pattern match 中呢 ?沒想到直接綁定也可以
python 中有一種寫法:- >>> point = x, y = 1, 2
- >>> point
- (1, 2)
- >>> x
- 1
- >>> y
- 2
復(fù)制代碼 在 Haskell 中類似的一種寫法:- Prelude> let point@(x, y) = (1, 2)
- Prelude> point
- (1,2)
- Prelude> x
- 1
- Prelude> y
- 2
復(fù)制代碼 再推廣一下:
除了常量、字符串外,任何其他 pattern matching 形式都可以被用到 Variables Binding 中
pattern 幾種形式請參考帖子:>>>Haskell語法參考(點(diǎn)擊此處)<<<中7. Patterns(模式)
- Prelude> let x = 1 --name
- Prelude> x
- 1
- Prelude> let _ = 1 -- _ 雖然這個(gè)語法正確,但不產(chǎn)生任何作用
- Prelude> let (x, y, z) = (1, 2, 3) -- (pat1, pat2 ... , patn)
- Prelude> x
- 1
- Prelude> y
- 2
- Prelude> z
- 3
- Prelude> let x:xs = [1, 2, 3] --pat1:pat2
- Prelude> x
- 1
- Prelude> xs
- [2,3]
- Prelude> let [_, x, y] = [1, 2, 3]
- Prelude> x
- 2
- Prelude> y
- 3
- Prelude> let 'a':'b':'c':x:xs = "abcdefg"
- Prelude> x
- 'd'
- Prelude> xs
- "efg"
- Prelude> let points@[point1, point2, point3] = [(1, 2), (3, 4), (4, 5)] --name@pat
- Prelude> points
- [(1,2),(3,4),(4,5)]
- Prelude> point1
- (1,2)
- Prelude> point2
- (3,4)
- Prelude> point3
- (4,5)
復(fù)制代碼
[ 本帖最后由 izhier 于 2009-5-1 19:12 編輯 ] |
|