在本章中,我们将学习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: Not in scope:'a'",Haskell编译器警告我们它无法识别您的输入。
Haskell遵循常规的ASCII编码样式。让我们看下面的示例以了解更多信息-
Prelude> '\97' 'a' Prelude> '\67' 'C'
查看如何将您的输入解码为ASCII格式。
字符串不过是字符的集合,使用字符串没有特定的语法,但是Haskell遵循用双引号表示字符串的常规样式。
Prelude> :t "learnfk.com"
它将在屏幕上产生以下输出-
"learnfk.com"::[Char]
了解如何将整个字符串仅解码为Char数组。
布尔数据类型也和其他数据类型一样非常简单,请看下面的示例,在该示例中,我们将使用一些布尔输入(例如"True"或"False")使用不同的布尔运算。
Prelude> True && True True Prelude> True && False False Prelude> True || True True Prelude> True || False True
让我们用"true"或"false"修改输入。
Prelude> true
它将产生以下输出-
<interactive>:9:1: Not in scope: 'true'
在上面的示例中,Haskell无法区分" true"和数字值,因此我们的输入" true"不是数字。因此,Haskell编译器将引发错误,指出我们的输入不是其作用域。
与其他数据类型一样, List也是Haskell中使用的非常有用的数据类型,根据示例,[a,b,c]是字符列表,因此List是用逗号分隔的相同数据类型集合。
看下面的示例,该示例显示Haskell如何处理列表。
Prelude> [1,2,3,4,5]
它将产生以下输出-
[1,2,3,4,5]
Haskell中的列表本质上是同类的,这意味着它们不允许您声明其他类型的数据类型的列表。任何类似[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'
列表可以理解为是使用数学表达式生成列表的过程,请看下面的示例,在该示例中,我们使用数学表达式以[输出|范围,条件]。
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]
Haskell提供了另一种在单个数据类型中声明多个值的方法,它称为元组,元组可以视为列表,但是元组和列表之间存在一些技术差异。
元组是不可变的数据类型,因为我们无法在运行时修改元素的数量,而列表是可变的数据类型。
元组由单个括号表示,请看以下示例,以了解Haskell如何处理元组。
Prelude> (1,1,'a')
它将产生以下输出-
(1,1,'a')
在上面的示例中,我们使用了一个具有两个 number 数字类型变量和一个 char 字符类型变量的元组。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)