查看文章 |
Haskell 中的模式绑定
2009-04-28 22:27
Haskell 可以这样绑定,一举三得 Prelude> let xss@(x:xs) = [1, 2, 3, 4] Prelude> xss [1,2,3,4] Prelude> x 1 Prelude> xs [2,3,4] 以前一直认为这种写法只是用在 pattern match 中呢 ?没想到直接绑定也可以 python 中有一种写法: >>> point = x, y = 1, 2 >>> point (1, 2) >>> x 1 >>> y 2 在 Haskell 中类似的一种写法: Prelude> let point@(x, y) = (1, 2) Prelude> point (1,2) Prelude> x 1 Prelude> y 2 再推广一下: 除了常量、字符串外,任何其他 pattern matching 形式都可以被用到 Variables Binding 中 pattern 几种形式请参考帖子:>>>hi.baidu.com/izhier/blog/item/11ef521fa67a8bfc1bd576fc.html<<<中7. Patterns(模式) Prelude> let x = 1 --name Prelude> x 1 Prelude> let _ = 1 -- _ 虽然这个语法正确,但不产生任何作用 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 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) |
最近读者:

