模式匹配(pattern matching) 这里的模式匹配有点像switch...case...下面的函数判断传入的参数是不是7 lucky :: (Integral a) => a -> String lucky 7 = "yes" lucky x = "no" 这个函数会从上而下判断,先看是不是7,如果是,则返回"yes",再看下一条规则, 这里的x表示任何变量(可以用任何名字表示)。 可以想到,可以使用这个办法来实现递归: fact :: (Integral a) => a -> a fact 0 =...
阅读更多curried function 我还是直接翻译成“用咖啡煮的函数吧”。 有一个有趣的现象: Prelude> max 1 2 2 Prelude> (max 1) 2 2 我刚开始觉得这太不可思议了,max 1居然可以执行,而且它的返回值还拿2来当参数! 原来这个函数可以写成下面这两种形式: Prelude> :t max max :: Ord a => a -> a -> a Prelude> :t max max :: Ord a => a -> (a -> a) 第二种,如果给max传一个参数x,则它返回一个函数,这个函数...
阅读更多what is haskell haskell是一种纯粹的函数式编程语言 没有副作用 一种懒惰的语言,只有当要显示结果的时候才执行函数 静态类型化,不用指定类型,编译器能自己决定 高雅,简洁,代码量少 由顶尖人才发明 how to program 2个著名的haskell编译器是GHC(glasgow haskell compiler)和Hugs 安装完ghc后,在终端打ghci,可以进入互动形式的编程环境,就像python和ielm [monkey@itlodge note]$ ghci GHCi, version 7.6.2: http://www.haskell.org/ghc/...
阅读更多一些基本的递归函数 在haskell中,没有循环,有的只是函数,要完成一些事情,只能使用递归来做,而且 完成得比较好。看下面的求最大值函数: -- function maxi, to get the maximum value of a list maxi :: (Ord a) => [a] -> a maxi [] = error "empty" maxi [only] = only maxi (first:rest) | first > maxRest = first | otherwise = maxRest where...
阅读更多概述 haskell有类型推理机制,如果我们写一个数字,我们不用告诉编译器它是一个数字, 编译器能够推理出它是一个数字。 使用:t命令可以查看一个表达式的类型。 ghci> :t 'a' 'a' :: Char ghci> :t False False :: Bool ghci> :t "aaa" "aaa" :: [Char] ghci> :t ('a', "aaa") ('a', "aaa") :: (Char, [...
阅读更多