Haskell: 要点小记
2018-08-11 本文已影响0人
庞贝船长
0, 改变提示符 Prelude
:~$ ghci
----
Prelude> :set prompt "ghci> "
ghci>
1, /=
表示 不等于(而不是自除!)(它看上去很像数学中的≠
。)
ghci> 4 == 4
True
ghci> 4 /= 4
False
2, if-then-else
: else
是强制要求的,有 if
必然有 else
.
3, 在 ghci
输入 =
错误:
ghci> a=3
<interactive>:61:2: parse error on input ‘=’
改为:
ghci> let a = 3
ghci> a
3
详见: StackOverflow: Haskell error parse error on input `='
4, 在 Haskell 中, True
, False
不定义为 1, 0 !! 非 0 值也不为 True
!!
ghci> True && 1
<interactive>:6:9:
No instance for (Num Bool) arising from the literal ‘1’
In the second argument of ‘(&&)’, namely ‘1’
In the expression: True && 1
In an equation for ‘it’: it = True && 1
5, 否定: not
类C的语言中通常用!
表示逻辑非的操作,而Haskell中用函数not
。
ghci> not True
False
6, 运算符优先级:Haskell给每个操作符一个数值型的优先级值,从1表示最低优先级,到9表示最高优先级。
ghci> :info (+)
class Num a where
(+) :: a -> a -> a
...
-- Defined in ‘GHC.Num’
infixl 6 +
ghci> :info (*)
class Num a where
...
(*) :: a -> a -> a
...
-- Defined in ‘GHC.Num’
infixl 7 *
7, pi
ghci> pi
3.141592653589793
8, 幂数 ^
: 用于整数幂; **
用于浮点数幂
ghci> 2^3
8
ghci> 2**3.0
8.0
9, 左右全闭区间
ghci> [1..10]
[1,2,3,4,5,6,7,8,9,10]
10,""
表示空字符串,它与 []
同义
ghci> "" == []
True
11, 在 Haskell里,所有类型名字都以大写字母开头,而所有变量名字都以小写字母开头。
12, :set +t
打印出类型, :unset +t
取消打印出类型
ghci> :set +t
ghci> 'c'
'c'
it :: Char
ghci> :unset +t
13, [Char]
是 string 的别名
ghci> "foo"
"foo"
it :: [Char]
14, %
构建分数
-- :m 加载模块 Data.Ratio
ghci> :m +Data.Ratio
ghci> 10 % 20
1 % 2
it :: Integral a => Ratio a
15, :type
ghci> 3 + 2
5
ghci> :type it
it :: Num a => a