![](https://img-blog.csdnimg.cn/2514dcb68d474bca898f0984a1f17804.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Haskell
文章平均质量分 65
Haskell学习笔记以及练习题
kingofyb
BEng 英国约克大学 Computer Science
MSc 英国伦敦大学学院ucl Information Security在读
展开
-
Haskell学习笔记8 - 训练题
Haskell 训练题原创 2022-09-27 18:35:33 · 227 阅读 · 1 评论 -
Haskell学习笔记7 - 平衡二叉树
首先连了解一下什么是平衡二叉树左右子树的高度差不能超过1子树也必须是一颗平衡二叉树这里有两个叶子节点(叶子节点就是没有子节点的节点),叶子节点由于没有任何子树所以永远都是平衡的,看到就可以忽略。只有A是分支节点,它的左右子树的高度都为1,所以平衡先定义一棵树data BinTree x = Lf Int | Branch (BinTree x) x (BinTree x) deriving (Eq, Show)Q1定义一个函数nullBR,实现最小的平衡二叉树最小其原创 2022-05-05 22:31:04 · 475 阅读 · 0 评论 -
Haskell学习笔记6 - 八道训练题
Q1type Predicate a = a -> BooltestP :: Bool testP = (isPass [] == False) && (isPass [2, 5, 6, 7] == False) && (isPass [12, 15, 16, 17] == True) && (isPass [5, 8, 12, 15] == True)isPass :: Predicate [Integer]写一个函数isPa原创 2022-05-04 19:46:10 · 308 阅读 · 0 评论 -
Haskell学习笔记5 -- 棋子 马的实现以及Monad定律
假设有一个类似国际象棋的棋盘,上面有一个棋子-马我们想了解马是否能用三步到达一个特定的位置创建一个类型别名来表示棋盘上马的位置:type KnightPos = (Int, Int)假设马从6,2出发,它能三步到达6,1吗?(友情提示:马走日)下面的函数取马的位置为参数,返回所有下一步可以到达的位置moveKnight :: KnightPos -> [KnightPos]moveKnight (c,r) = do (c',r') <- [(c+2,r原创 2022-05-02 03:51:54 · 392 阅读 · 0 评论 -
Haskell学习笔记4 -- Monad
如果一个函数接收的是一个普通的值,然后返回一个盒子怎么将这个函数应用在一个盒子上,并得到一个单独的盒子呢?(>>=) :: Monad m => m a -> (a -> m b) -> m b>>=先接收一个装有值的盒子 (f a),然后是一个特殊的接受值返回盒子的函数 ((a -> f b))最后返回一个盒子 (f b)Just 1 >>= \x -> Just (x+3)先将盒子中的值 1 取出来,然后传入原创 2022-04-30 21:46:17 · 237 阅读 · 0 评论 -
Haskell学习笔记3 -- Monoid
首先先比较一下data,type和newtypetype关键字用于创建类型别名,仅仅是给已知类型赋予一个新名字比如type IntList = [Int]并没有创建值构造器,[Int]和IntList只是引用同一个类型的两种方式newtype关键字用来将已知类型包裹为新类型newtype CharList = CharList {getCharList :: [Char]}我们不能用++来拼接一个CharList和一个类型为[Char]的列表,也不能用++来拼接两个Ch.原创 2022-04-28 20:45:26 · 307 阅读 · 0 评论 -
Haskell学习笔记2 -- Functor & Applicative 函子
Currying 柯里化首先了解一下currying的概念,在Haskell中二元函数(+)在接收了参数1后会返回一个新的函数(+1)而函数(+1)在接收了参数2后会返回一个值31 + 2(+1) 23函数f接收x返回f(x) -- a -> bFunctor但现在如果我们有一个函数(比如(+3))和一个盒子(比如 Just 1)该怎么将函数应用在这个盒子的值上呢函数的输入是一个值,并不能接收一个盒子这时就要使用fmap函数fmap接收一个函数和一个装在盒子里的原创 2022-04-27 22:45:44 · 487 阅读 · 0 评论 -
Haskell学习笔记1
十道关于list列表的题来源:99 questions/1 to 10 - HaskellWikiHoogle目录1.找列表最后一个元素2.找列表倒数第二个元素3.找列表第k个元素4.找列表有多少个元素5.反转列表6.找是不是回文 palindrome7.展开嵌套列表8.消除列表的重复元素9.将列表中一样的元素分组10.统计列表中每个元素的个数1.找列表最后一个元素最简单的方法就是反转列表然后再提取第一个元素myLast' :: [a]原创 2022-03-17 00:06:29 · 365 阅读 · 0 评论