由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请问haskell中的underscore
相关主题
Python擂台:算24点请用过JAXWS和JAXB的赐教更改service method名字
haskell 真是逆天, 各种特殊符号都有特殊用途underscore usage in C++ name
scala for comprehension 不支持 letJavascript确实是最优秀的语言之一
大家有没有觉得Scala不如Haskell美?求教一个matlab和.net整合的问题
最近感觉了一下市场上对scala的需求JavaScript 有没有 optional Type 或者 JSON field 校验
Call assembly in c++ under linux平生不学fp 纵称程序员也枉然
Can someone help me a quick regex?JS总是有点别扭
大家programming时怎么命名?Angular放弃service直接用controller如何
相关话题的讨论汇总
话题: match话题: xs话题: length话题: 长度话题: 任意
进入Programming版参与讨论
1 (共1页)
s*******u
发帖数: 1855
1
http://learnyouahaskell.com/syntax-in-functions
ex1:
first :: (a, b, c) -> a
first (x, _, _) = x

second :: (a, b, c) -> b
second (_, y, _) = y

third :: (a, b, c) -> c
third (_, _, z) = z
从第一个例子看,_可以match一个single value.
ex2:
head' :: [a] -> a
head' [] = error "Can't call head on an empty list, dummy!"
head' (x:_) = x
从这个例子看,_可以match任意长度的value
到底是single,or任意长度呢?
ex3:
length' :: (Num b) => [a] -> b
length' [] = 0
length' (_:xs) = 1 + length' xs
这里,assume这个_ match一位,而不是任意长度.任意长度被xs来match.为什么不是_
match任意长度,xs来match最后一个single value?
谢谢!
b********0
发帖数: 62
2
_可以match一切 与类型长度无关
这个match是构造这个变量的逆过程 应该是有唯一的结果的

【在 s*******u 的大作中提到】
: http://learnyouahaskell.com/syntax-in-functions
: ex1:
: first :: (a, b, c) -> a
: first (x, _, _) = x
:
: second :: (a, b, c) -> b
: second (_, y, _) = y
:
: third :: (a, b, c) -> c
: third (_, _, z) = z

s*******u
发帖数: 1855
3
谢谢!
那么为什么例子3:
ex3:
length' :: (Num b) => [a] -> b
length' [] = 0
length' (_:xs) = 1 + length' xs
underscore是match第一个value,而不是前面所有的values(除了最后一个)?为什么xs来
match可变长度,而不是underscore?
l*******e
发帖数: 309
4

你可以看看这个
http://en.wikibooks.org/wiki/Haskell/Pattern_matching
Pattern match是deconstruct的过程,要一步一步来。冒号是constructor,先match,
然后_和xs再match。_不绑定,xs绑定到list的tail。

【在 s*******u 的大作中提到】
: 谢谢!
: 那么为什么例子3:
: ex3:
: length' :: (Num b) => [a] -> b
: length' [] = 0
: length' (_:xs) = 1 + length' xs
: underscore是match第一个value,而不是前面所有的values(除了最后一个)?为什么xs来
: match可变长度,而不是underscore?

b********0
发帖数: 62
5
比如说[1,2,3] 就是 1:2:3:[]
match _:xs 就是 1, :, 2:3:[]
如果你要match 1:2, :, 3:[]
你会发现1:2不是一个有效的类型

【在 s*******u 的大作中提到】
: 谢谢!
: 那么为什么例子3:
: ex3:
: length' :: (Num b) => [a] -> b
: length' [] = 0
: length' (_:xs) = 1 + length' xs
: underscore是match第一个value,而不是前面所有的values(除了最后一个)?为什么xs来
: match可变长度,而不是underscore?

l******t
发帖数: 55733
6
属实。1:2不存在

【在 b********0 的大作中提到】
: 比如说[1,2,3] 就是 1:2:3:[]
: match _:xs 就是 1, :, 2:3:[]
: 如果你要match 1:2, :, 3:[]
: 你会发现1:2不是一个有效的类型

a*****e
发帖数: 1700
7
写成 1 : ( 2 : ( 3 : [] ) ) 就容易理解了,因为 : 操作是 right associative。
Haskell 里面如果用符号做 data constructor 或者 function name,缺省是作为中缀
操作使用的。

【在 b********0 的大作中提到】
: 比如说[1,2,3] 就是 1:2:3:[]
: match _:xs 就是 1, :, 2:3:[]
: 如果你要match 1:2, :, 3:[]
: 你会发现1:2不是一个有效的类型

s*******u
发帖数: 1855
8
thanks for all helps. understand now. key point is :, not _ or xs.
1 (共1页)
进入Programming版参与讨论
相关主题
Angular放弃service直接用controller如何最近感觉了一下市场上对scala的需求
golang里面 函数received type关于指针和非指针有什么难的。Call assembly in c++ under linux
用node怎么把多个mysql query 的结果合起来Can someone help me a quick regex?
palantir的stack大家programming时怎么命名?
Python擂台:算24点请用过JAXWS和JAXB的赐教更改service method名字
haskell 真是逆天, 各种特殊符号都有特殊用途underscore usage in C++ name
scala for comprehension 不支持 letJavascript确实是最优秀的语言之一
大家有没有觉得Scala不如Haskell美?求教一个matlab和.net整合的问题
相关话题的讨论汇总
话题: match话题: xs话题: length话题: 长度话题: 任意