2019-2-19 Haskell学习笔记
因为Lyzh大佬的安利作死想了解下Haskell语言于是就有了这个坑 :cry:
haskell中不存在0为False 其他数为True这么一说 具体如下
1 True && 11
? No instance for (Num Bool) arising from the literal ‘11’
? In the second argument of ‘(&&)’, namely ‘11’
In the expression: True && 11
In an equation for ‘it’: it = True && 11
1 | True && 0 |
? No instance for (Num Bool) arising from the literal ‘0’
? In the second argument of ‘(&&)’, namely ‘0’
In the expression: True && 0
In an equation for ‘it’: it = True && 0
> Haskell的运算中实际上是没有负数这么一说负数相当于正数再加(-)
> 所以出现如下现象
1 | orochi> 1-2 |
1 | orochi> 1+-2 |
再举个运算符优先级的例子1
2
3
4ghci> 1 + (4 * 4)
17
ghci> 1 + 4 * 4
17
这个例子里面一个使用了括号运算符一个没有使用但是结果一样 原因如下1
2
3
4
5
6
7
8
9
10
11
12
13
14orochi> :info (+)
class Num a where
(+) :: a -> a -> a
...
-- Defined in ‘GHC.Num’
infixl 6 +
orochi> :info (*)
class Num a where
...
(*) :: a -> a -> a
...
-- Defined in ‘GHC.Num’
infixl 7 *
可以看到通过交互式终端GHCI + 符号返回了6
而 * 号通过交互式终端GHCI返回了7
7>6所以先执行了乘号
为了证明此解释 我们使用返回值为8的 ^ 符号进行测试1
2
3
4
5(^) :: (Num a, Integral b) => a -> b -> a -- Defined in ‘GHC.Real’
infixr 8 ^
orochi> 2^3 * 3 + 1
25
可以看到先执行了^之后执行了*最后执行的+