Haskell 入门笔记(零)

一切就绪以后,会出现 Prelude> 提示符告诉你 Prelude 库已经加载完毕,Prelude 库是 Haskell 缺省加载的库。

模块 Prelude 有时候被称为“标准序幕”(the standard prelude),因为它的内容是基于Haskell 98标准定义的。通常简称它为“序幕”(the prelude)。

此时有两种输入——命令或是表达式。先来研究一下命令:
命令是以 : 开头的。
首先当然是帮助命令 :?:help
然后是退出命令 :q:quit
然后是加载你自己编写的 hs 文档的命令 :l:r:load:reload.
执行shell命令 :!,比如 : :!ls :!dir /b

——做了个小实验,执行一下 :!ghci 然后发现需要 :q 两次。。。真是闲的蛋疼(´・_・`)

Haskell比较引人注目的地方在于它的类型检查系统,所以有一些类型检查的命令需要注意:

:t:type 显示出这个表达式的类型
:set +t 所有表达式默认显示出其类型
:unset +t 字面意思
:i 显示 info,比如 :i (+)

当然,set也有很多其他参数,比如 :set prompt 可以把你的模块的默认提示符给改掉啊什么的,不细说了。。

show系列的命令也很有意思,比如 :show bindings:show breaks:show imports等等,都是很有用的命令

还有一些debug命令,目前还用不上,先不管它了。。

分别实验一下 1+12^655353**82**65535"hello world"
a=1 的意思是定义了一个没有输入的函数 a,它会返回1
并不是赋值的意思。要知道,Haskell 本着万物皆函数的思想,这里的a=1的意思是定义了一个没有输入的函数a,它会返回1。

同样的,+ 也是一个函数,只是因为它有两个参数故采用了人们所喜闻乐见的中缀写法。但你完全可以这么写:

c = (+) a b  

不信的话可以去看info:

01.Prelude> :info (+)  
02.class Num a where  
03.  (+) :: a -> a -> a  
04.  ...  
05.    -- Defined in `GHC.Num'  
06.infixl 6 +  

另外补充一点,ghci提供了一个名为it的特殊变量,它和计算器里的ANS一样,保存的是上一次计算的结果。

列表和元组的区别

A tuple is a fixed-size collection of values, where each value can have a different type.
This distinguishes them from a list, which can have any length, but whose elements must all have the same type.

Prelude> (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63)

:4:1:
    A 63-tuple is too large for GHC
      (max size is 62)
      Workaround: use nested tuples or define a data type

cons的运算符,它负责将单独一个元素添加到列表的最前面

ghci> 1 : [2,3]
[1,2,3]
ghci> 1 : []
[1]

说到列表就不得不说字符串。因为Haskell中的字符串完全就是字符列表的语法糖:

ghci> let a = ['l', 'o', 't', 's', ' ', 'o', 'f', ' ', 'w', 'o', 'r', 'k']
ghci> a
"lots of work"
ghci> a == "lots of work"
True
ghci> "" == []
True
ghci> 'a':"bc"
"abc"
ghci> "foo" ++ "bar"
"foobar"

使用 let 赋值

Prelude> let x = 1
Prelude> :t x
x :: Num a => a 

你可能感兴趣的:(Haskell 入门笔记(零))