Haskell - 数据模型

Haskell - 数据模型 首页 / Haskell入门教程 / Haskell - 数据模型

在本章中,我们将学习Haskell的基本数据模型。

Number

按照示例,转到您的前奏命令提示符,然后运行" 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

Characters

像数字一样,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格式。

String

字符串不过是字符的集合,使用字符串没有特定的语法,但是Haskell遵循用双引号表示字符串的常规样式。

Prelude> :t "learnfk.com" 

它将在屏幕上产生以下输出-

"learnfk.com"::[Char] 

了解如何将整个字符串仅解码为Char数组。

Boolean

布尔数据类型也和其他数据类型一样非常简单,请看下面的示例,在该示例中,我们将使用一些布尔输入(例如"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

与其他数据类型一样, 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]

Tuple

Haskell提供了另一种在单个数据类型中声明多个值的方法,它称为元组,元组可以视为列表,但是元组和列表之间存在一些技术差异。

元组是不可变的数据类型,因为我们无法在运行时修改元素的数量,而列表是可变的数据类型。

元组由单个括号表示,请看以下示例,以了解Haskell如何处理元组。

Prelude> (1,1,'a') 

它将产生以下输出-

(1,1,'a') 

在上面的示例中,我们使用了一个具有两个 number 数字类型变量和一个 char 字符类型变量的元组。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

微服务架构核心20讲 -〔杨波〕

从0开始学微服务 -〔胡忠想〕

iOS开发高手课 -〔戴铭〕

性能工程高手课 -〔庄振运〕

摄影入门课 -〔小麥〕

代码之丑 -〔郑晔〕

超级访谈:对话汤峥嵘 -〔汤峥嵘〕

大厂设计进阶实战课 -〔小乔〕

结构沟通力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)