基本数据类型
Haskell是一种纯函数式编程语言,因此它比其他编程语言更具交互性和智能性.
数字
Haskell非常智能,可以将某个数字解码为数字.因此,您不必像其他编程语言那样在外部提及其类型.按照例子,转到你的前奏命令提示符,然后运行"2 + 2"并点击回车.
sh-4.3$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> 2+2
您将收到以下输出结果.
4
在上面的代码中,我们只是将两个数字作为参数传递给GHCI编译器而没有预定义它们的类型,但编译器可以轻松解码这两个条目作为数字.
现在,让我们尝试更复杂的数学计算,看看我们的智能编译器是否给出了正确的输出.试试"15+(5 * 5)-40"
Prelude> 15+(5 * 5)-40
上述表达式根据预期输出得出"0".
0
字符
与数字一样,Haskell可以智能识别作为输入给出的字符.转到您的Haskell命令提示符并输入带双引号或单引号的任何字符.
让我们提供以下行作为输入并检查其输出.
Prelude> :t "a"
它将产生以下输出 :
"a":: [Char]
请记住在提供输入时使用(: t ).在上面的示例中,(:t)将包括与输入相关的特定类型.我们将在接下来的章节中详细了解这种类型.
看一下下面的示例,我们将一些无效输入作为char传递,这反过来会导致错误.
Prelude> :t a
<interactive>:1:1: Not in scope: 'a'
Prelude> a
<interactive>:4:1: Not in scope: 'a'
错误消息"< interactive>:4 :1:不在范围内:"a""Haskell编译器警告我们它无法识别您的输入. Haskell是一种语言,其中所有内容都使用数字表示.
Haskell遵循传统的ASCII编码风格.让我们看一下下面的例子,了解更多和减号;
Prelude> '\ 97'
'a'
Prelude> '\ '67'
'C'
查看输入如何解码为ASCII格式.
字符串
字符串只是一组字符.使用字符串没有特定的语法,但Haskell遵循用双引号表示字符串的传统方式.
看一下我们传递字符串"Tutorialspoint"的下面的例子. com".
Prelude> :t"JS.com"
它将在屏幕上产生以下输出 :
"JS.com":: [Char]
查看整个字符串是如何被解码为仅限Char的数组.让我们转到其他数据类型及其语法.一旦我们开始实际练习,我们将习惯所有数据类型及其用途.
布尔
布尔数据类型也相当多像其他数据类型一样直截了当.请看下面的例子,我们将使用一些布尔输入使用不同的布尔运算,例如"True"或"False".
Prelude> True && True
True
Prelude> True && False
False
Prelude> True || True
True
Prelude> True || False
True
在上面的例子中,我们不需要提到"True"和"False"是布尔值. Haskell本身可以对其进行解码并执行相应的操作.让我们用"true"或"false"修改我们的输入.
Prelude> true
它将产生以下输出 :
<interactive>:9:1: Not in scope: 'true'
在上面的例子中,Haskell无法区分"true"和数字值,因此我们的输入"true"不是数字.因此,Haskell编译器抛出一个错误,指出我们的输入不是它的范围.
列表和列表理解
像其他数据类型一样, List 也是Haskell中使用的非常有用的数据类型.例如,[a,b,c]是一个字符列表,因此,根据定义,List是由逗号分隔的相同数据类型的集合.
与其他数据类型一样,您无需将List声明为List. Haskell足够智能,可以通过查看表达式中使用的语法来解码输入.
看一下下面的例子,它显示了Haskell如何处理List.
Prelude> [1,2,3,4,5]
它将产生以下输出 :
[1,2,3,4,5]
Haskell中的列表本质上是同质的,这意味着他们赢了" t允许您声明不同类型的数据类型的列表.任何像[1,2,3,4,5,a,b,c,d,e,f]这样的列表都会产生错误.
Prelude> [1,2,3,4,5,a,b,c,d,e,f]
此代码将产生以下错误 :
<interactive>:17:12: Not in scope: 'a'
<interactive>:17:14: Not in scope: 'b'
<interactive>:17:16: Not in scope: 'c'
<interactive>:17:18: Not in scope: 'd'
<interactive>:17:20: Not in scope: 'e'
<interactive>:17:22: Not in scope: 'f'
列表理解
列表理解是使用数学表达式生成列表的过程.请看下面的例子,我们使用数学表达式生成一个列表,格式为[output |范围,条件].
Prelude> [x*2| x<-[1..10]]
[2,4,6,8,10,12,14,16,18,20]
Prelude> [x*2| x<-[1..5]]
[2,4,6,8,10]
Prelude> [x| x<-[1..5]]
[1,2,3,4,5]
这种使用创建一个List的方法数学表达式被称为列表理解.
元组
Haskell提供了另一种在单个数据中声明多个值的方法类型.它被称为 Tuple .元组可以被认为是一个列表,但是元组和列表之间存在一些技术差异.
元组是一个不可变的数据类型,因为我们无法修改元素的数量在运行时,List是一种可变数据类型.
另一方面,List是一种同类数据类型,但是Tuple本质上是异构的,因为元组可能包含不同类型的其中的数据.
元组用单括号表示.看一下下面的例子,看看Haskell如何处理一个元组.
Prelude> (1,1,'a')
它将产生以下输出 :
(1,1,'a')
在上面的例子中,我们使用了一个带有两个数字