查看文章
 
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)

类别:Haskell||添加到搜藏 |分享到i贴吧|浏览(77)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu