###haskell 基本类型,bool(True/False),list[],tuple(),int,Integer,Double,char'' ,string"",function(\x->x+1)
- wiki
- packing
- API链接
- IDE:leksah
- 测试工具QuickCheck,HUnit
- 包管理工具cabal
- 手动安装包:
cd file_path
runhaskell Setup configure
runhaskell Setup build
sudo runhaskell Setup install
- 编译运行
- :m + Data.List Data.Map Data.Set追加模块到当前环境 ,还有:t,:k,:i, 且:h查看帮助
- runhaskell hell.hs
- ghc --make helloworld and then ./helloworld
-
let/in 在函数的应用
root s = let p = 2 in s*p + q where q = 10
-
List类型
- List是同质的,所有元素是相同类型,若是函数a->b,则各个元素in/out类型相同.
- s = [1,2,3] ; s!!0 取值
- 函数 null ,length, head,tail,last,init,sum,product,reverse,take,drop,maximum,elem,and(所有元素为True则True),zipWith
- a = [1..2],coffescript 也有
- 没有map,有Map.fromList [(5,'a'), (3,'b')] ! 5
- 匿名函数
- (\a->a*2) 2
- (*3),(+3)偏应用函数
- (,) 相当 \x,y->(x,y)
- id:: a->a , id 2 = 2
-
没有循环,用迭代代替
[a | a <- [1,2,3]] if 2>3 then 2 else 3
-
门卫
f a b |a==b = b |a > b = a |otherwise = a+b -- 这里otherwise = True是关键字
-
curry(多个参数,实际上是一个参数,返回一个函数作为结果) + 偏应用
- f a b = a+b
- g (a,b) = a+b
- f = curry g
- g = uncurry f
- 若第二个参数给出的curry, 则使用中缀表示法,如s = (`elem` [1,2,3])为偏函数
-
".lhs" 文件以">"符号开始代码,其他的都是注释。
-
关键字
- data
- type
- newtype 是临时的data定义
- class
- instance
- qualified
- 派生deriving [ Eq(相等), Ord(比较), Enum(枚举), Bounded(最大最小), Show and Read(串化和逆串化)]
- classes ,继承
class (Eq a) => Ord a where
compare :: a -> a -> Ordering
(<), (<=), (>=), (>) :: a -> a -> Bool
max, min :: a -> a -> a
(*3),(+3)偏应用函数
我觉得翻译成 部分应用函数 比较好。好像这个用的比较多。