×

Haskell大法好1

96
_proto_麻瓜一袁
2017.07.23 23:42* 字数 486
  1. 终端输入<code>ghci</code>开始魔幻之旅。

  2. 为了美观起见,更改指令显示 <code>:set prompt "ghci> "</code> 把它改成 ghci>

  3. 第一个外部文件:
    先新建文件baby.hs,然后在里面输入我们的函数:

doubleMe x = x + x

然后用命令<code>:l baby.hs</code> 进行加载,加载完成后会有提示。
然后我们再输入以下代码测试。

doubleMe 5

发现返回为10(即之前定义函数的返回值)。

  1. if/then/else
    haskell的条件判断与其他语言稍有不同,由于设计原因,所有的东西都应该有返回,所以我们不能省略then和else。具体结构如下
if 条件 then 满足if的表达式 else 不满足的if的表达式
test x = if x>100 then x else x*2
  1. list
    list数据结构用来存储多个类型相同的元素
    ghci下 可以用let 声明常量
let x=[1,2,3]
let y=[1,2,3]
x++y  // [1,2,3,1,2,3]

利用<code>:</code>可以实现对list的插入

5:[1,2,3] //[5,1,2,3]
[1,2,3]:5 //error

使用 <code>!!</code> 运算符,按照索引取得 List 中的元素

[1,2,3]!!2 //3

last的head/last/tail/init等操作

ghci>head [1,2,3]
1
ghci>last [1,2,3]
3
ghci>tail [1,2,3]
[2,3]
ghci>init [1,2,3]
[1,2]
ghci>length  [1,2,3]
3
ghci>null [1,2,3]
False
ghci>null []
True
ghci>reverse [1,2,3]
[3,2,1]
ghci>take 0 [1,2,3]
[]
ghci>take 1 [1,2,3]
[1]
ghci>take 2 [1,2,3]
[1,2]
ghci>take 5 [1,2,3]
[1,2,3]
ghci>maximum [1,2,3]
3
ghci>minimum [1,2,3]
1
ghci>sum [1,2,3]
6
ghci>1 `elem` [1,2,3]
True
ghci>0 `elem` [1,2,3]
False

关于list结构如下:


list结构

6.range

ghci>[1..5]
[1,2,3,4,5]
ghci>[2,4..5]
[2,4]
ghci>[10,20..50]
[10,20,30,40,50]
ghci>[3,6..12]
[3,6,9,12]

7.<code>:t xxx</code>来做类型判断

ghci>:t "a"
"a" :: [Char]
ghci>:t 1
1 :: Num t => t
ghci>:t doubleMe
doubleMe :: Num a => a -> a

8.数据类型

Int 表示整数。对 32 位的机器而言,上限一般是 2147483647,下限是 -2147483648。

Integer 表示整数,但它是无界的

Float 表示单精度的浮点数。

Double 表示双精度的浮点数。

Bool 表示布尔值,它只有两种值:True 和 False。

Char 表示一个字符。一个字符由单引号括起,一组字符的 List 即为字符串。

Tuple 的类型取决于它的长度及其中项的类型。注意,空 Tuple 同样也是个类型,它只有一种值:()。

9.杂记
函数优先级 > 乘法优先级
函数复合(顺序从右到左) 比如:A->B->C 表示 A->(B->C)
兰姆达表达式:
\n => 2*n+1

Prelude> map (\n->2*n+1) [1..5]
[3,5,7,9,11]

== 表示相等
/= 表示不相等
输出使用putStrLn

Prelude> putStrLn("11111"++"\n"++"22222"++"\n"++"3333333")
11111
22222
3333333
学习栈
Web note ad 1