「杂谈」我与几门编程语言之间的故事
第二次学完 Rust 基础之后没事闲的来写篇博客讲讲故事
本来想只写 Rust 来着,想了想又觉得其它语言不说也不好,干脆都写下来吧(
第二次学完 Rust 基础之后没事闲的来写篇博客讲讲故事
本来想只写 Rust 来着,想了想又觉得其它语言不说也不好,干脆都写下来吧(
Haskell中的函子单子等都与范畴论(category theory)有很多联系,所以打算简单了解一下范畴论的相关内容。
范畴论是数学的一门学科,以抽象的方法处理数学概念,将这些概念形式化成一组组的“物件”及“态射”。数学中许多重要的领域可以形式化为范畴。使用范畴论可以令这些领域中许多难理解、难捉摸的数学结论更容易叙述证明。
———— 维基百科
范畴本质上是一个简单的集合,一个范畴$\mathbf{C}$包含三个组成成分:
半群(semigroup)是一个集合$S$,它需要指定一个二元运算符$\oplus$,并且满足
$$
a\oplus b \in S\quad a, b\in S
$$
以及结合(associative)律:
$$
(a\oplus b)\oplus c = a\oplus (b\oplus c)
$$
这个二元运算符在Haskell的Semigroup中被定义为<>
函数:
函子(Functor)是一个类型类(typeclass),和其他类型类一样,它规定了其实例类必须实现的功能(例如Eq类型类规定了它的实例必须是可以比较是否相等的),Functor规定类它的实例必须是可以进行映射的。Functor要求使用fmap
:: (a -> b) -> f a -> f b 函数来实现这个功能,它接收一个a -> b类型的函数、一个内部元素为a类型的函子,返回一个内部元素为b类型的函子
Haskell有一个静态类型系统,任何变量、函数都会具有类型,并且有类型判断功能,没给出的类型会自动识别。
Type的首字母全为大写,常用的有:
Int
:整型,有上下界范围,-2147483647~2147483648Haskell中的函数是柯里化(Currying)的,可以看作所有函数都只接收一个参数,而接收两个参数的函数实际上是这个函数接收了第一个参数后返回了一个接收第二个参数的函数,然后用这个函数接收第二个参数,返回最终的结果。比如max函数,它的类型签名是:
学习一门新语言之Haskell
之前一直很好奇函数式编程,觉得Haskell挺有意思的,想学学
现在高考完放假了,可以有时间具体学一学了
这里没有Haskell的教程,只有我在学习Haskell时写下的笔记