haskell笔记2】的更多相关文章

类型 (Type) Haskell的类型系统式静态类型系统,在编译的时候就知道数据类型,所以不同类型的值运算在编译的时候就会报错,比如用布尔值和整数运算,在C语言中这种运算就不会报错. Haskell 支持类型推导 使用:t命令后跟任何可用的表达式,即可得到该表达式的类型,如:t 'a'将输出 'a'::Char表示a是Char型. 函数也有类型,编写函数时,给它一个明确的类型声明是个好习惯,参数之间由 -> 分隔,而与回传值之间并无特殊差异.回传值是最后一项,参数就是前三项,比如 addThr…
函数系统 函数式编程当然少不了函数系统啦,在教程最初的时候就有一个最简单的函数,函数系统贯穿在Haskell全部,Haskell的函数有几个重要的性质. 首先声明一下函数的参数和返回值类型 然后有一个很重要写法就是匹配,用匹配来匹配参数,所以Haskell的函数写法和其他语言不一样,同样一个函数可能有几种表达形式 模式匹配 函数匹配的一个例子,比如有这么一个函数,当用户输入7时显示输入了七,否则显示没输入7. lucky :: (Integral a) => a -> String lucky…
①循环?NO!请递归思考问题! 手艹一个求列表中最大值代码,C语言中习惯性for扫一下比较出最大值.但是可以用递归! maximum'::(Ord a)=>[a]->a maximum' []=error "empty!" maximum' [x]=x maximum' (x:xs) = max x (maximum' xs) 同样的对列表的递归技巧可以手艹出take.reverse.repeat.zip.elem rev::[a]->[a] rev []=[] re…
haskell platform下载:https://www.haskell.org/platform/ 进入haskell控制台,终端输入 $ ghci 编译文件 :l file.hs 数组操作 >> length [2,3] 长度 >> head [2,3] 首值 >> tail [2,3] 去除头之后 >> last [2,3] 尾值 >> 2:[1] 连接数组 >>[2,3] > [1,3]比较 >> nul…
①如何写一个求阶层函数? fac 0 =1 fac n=n*fac(n-1) 函数自适应匹配参数,可以把特判情况写在前面,注意按顺序匹配的,n这种万能情况写在最前面就完蛋了.同时你也注意到,函数只能一行写完,不能智能识别作用域啊!! ②灵活的使用你的函数参数! 看这个求三元组第三个值的函数,占位符_的神奇使用. third::(a,b,c)->c third (_,_,c)=c 更神奇的手艹head函数, (x:_)中占位符模拟出了列表的剩余部分 head’::[a]->a head’ (x:…
①一切都是函数,包括常量.表达式,格式:名字 参数1 参数2.. =函数内容 ②if语句(else绝对不可以省略) F=if (..) then x else y ③没有数组,只有列表[1,2,3,4,5], [‘h’,’e’] 列表有好多运算符: “++” :同类型拼接 “ : “ :前端插入,1:2:3:4:5:[]等效于[1,2,3,4,5],后端插入请用++ “!!”: 下标索引,从0开始,[1,2,3]!!1=2 列表是可以嵌套的[[1,2],[3,4]] 列表是可以比较的[1,2,3…
模式匹配 # haskell_test.hs length' :: [a] -> a length' [] = 0 length' (_:x) = 1 + length' x as模式 xs@x:y:ys xs代表整个list x代表一部分 方便引用原值,而非分割的 capital :: String -> String capital "" = "empty" capital xs@(x:y) = "the first of " +…
Haskell笔记这是第三次总结,前两次都因为各种原因丢失了,对于Haskell我算不上什么大神,只不过在大学时为了学习算法时选择了Haskell. 当时的入门书籍选择的是<Learn You Haskell>,如果你对Haskell有兴趣,它会是一个很好的选择. 编译器来这里下载https://www.haskell.org/downloads 什么是Haskell? Haskell是一种纯函数式编程语言,在生产环境中使用的较少. -  Haskell的变量一旦定义就不会更改,比如定义变量x…
一开始学习函数式编程语言就被告知函数式编程语言是一种“定义式”的语言,而不是一种命令式的语言,在学习haskell的函数语法时,此感觉更加强烈,haskell的函数定义倾向于一种类似C++里面的switch /case 的语义,将函数所处理的事情分类,然后定义好每个分类该如何返回.所以我的函数笔记主要就haskell函数里的几种分类情况进行讨论: condition expression 语法类似于if then else ;允许嵌套,但是每个if  必须对应一个else 否则语法报错.示例如下…
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Existentials GADTs {-# LANGUAGE GADTs #-} 广义抽象代数类型专用语言扩展 Haskell语言学习笔记(74)GADTs OverloadedStrings {-# LANGUAGE OverloadedStrings #-} 用于重载字符串字面量类型的语言扩展 H…