Haskell趣学指南学习日记(3)

原创 2015年07月09日 21:33:40

Haskell的类型系统


Haskell与弱类型语言不太一样,它拥有一个完善的类型系统,虽说完善,但是也非常简单,下面稍微就稍微列举一下:

  • Int
  • Integer
  • Float
  • Double
  • Bool
  • Char
  • 元组
  • 类型类(typeclass)

这里最重要的则是类型类了,你可以将它看作一个接口。我们可以继承这个类型类来实现我们自己的实例。而在Haskell中,所有的运算符基本都是继承自类型类的。

查看变量的类型

在Haskell中,我们可以很轻松地使用命令来查看一个变量的类型,只要输入:t后接变量即可:

list = [1,5]

显示定义类型

Haskell会自动为我们推倒出变量的类型,但这只限于变量的声明。对于函数,就无能为力了,因为函数一般都是使用类型变量的,下面会介绍它,先来看显示定义函数参数和返回类型:

isPass :: Int -> Bool
isPass grade = if grade <60
               then False
               else True

在函数定义前我们可以加上类型定义,这里定义了一个叫isPass函数,它接受一个Int参数,返回一个Bool值。定义多个参数也很简单,只要追加在第一行即可:

printPerson :: String->Int->String
printPerson name age = name ++",age: "++show age


show函数暂时可以理解为toString

我们可以使用这种方式一直追加下去,不过要记住,最后一个参数是返回值的类型,函数必须要有返回值。

模式匹配

同所有现代语言一样,Haskell也支持泛型,不过在Haskell中,泛型便称之为类型变量,它的使用也非常简单,我们在一开始定义函数时就已经使用过了:

max2 a b = if a>b 
           then a 
           else b

Haskell的一些坑


  • 当你的代码出现错误时,比如无法载入模块,请把函数名称的首字母改为小写,在Haskell中,除了类型名字其余的首字母都应该小写。
  • Haskell中的类型是与机器有关的,比如Int类型的最大值在32位和在64位机器上的结果是不同的。
  • 有时候,你可以使用:t命令来查看一些运算符的类型,你会发现它们都是实现了一种特定的类型类
  • String类型其实是Char数组,而数组其实是一串:运算符连接起来的。比如[1,5,7]的真实身份是 1:5:7:[]
版权声明:如果你觉得作者有什么错误的地方,可以在评论区里指出来。

Haskell趣学指南7-8

  模块装载模块haskell中的模块是含有一组相关的函数,类型和类型类的组合。而haskell程序的本质便是从主模块中引用其它模块并调用其中的函数来执行操作。这样可以把代码分成多块,只要一个模块足...
  • zwjsatan
  • zwjsatan
  • 2010年08月28日 13:43
  • 6511

Haskell趣学指南学习日记(4)-强大的函数

函数基础Haskell是一门函数式语言,他的核心用法也是围绕着函数所展开的,所以它本身也自带了一套十分强大的函数系统。模式匹配进阶前面我们谈到了Haskell的模式匹配,其实就是将函数的参数显示定义,...
  • github_29370025
  • github_29370025
  • 2015年07月11日 18:28
  • 247

Haskell趣学指南4-6

  函数的语法模式匹配本章讲的就是haskell那套酷酷的语法结构,先从模式匹配开始。模式匹配通过检查数据的特定结构来检查其是否匹配,并按模式从中取得数据。在定义函数时,你可以为不同的模式分别定义函...
  • zwjsatan
  • zwjsatan
  • 2010年08月28日 13:40
  • 6064

Haskell趣学指南学习日记(2)

列表推导式在Haskell中,列表推倒式绝对是我见过最厉害的推倒了(什么鬼),哦不是,是最厉害的一个特性了。还记得我在小学一年级的时候,在公堂之上。。。不对,是高中的时候,接触到了列表推倒式。它的语法...
  • github_29370025
  • github_29370025
  • 2015年07月08日 15:24
  • 332

Haskell趣学指南学习日记(1)

Haskell入门
  • github_29370025
  • github_29370025
  • 2015年07月07日 21:28
  • 260

趣学Python-教孩子学编程--第三章

知识点: 1、字符串      1>字符串可以用单引号(' ')、双引号(" ")、三引号(''' ''')来表示。      2>不同之处在于,三引号可以创建不止一行的字符串。      3...
  • wangluoershixiong
  • wangluoershixiong
  • 2015年11月28日 18:50
  • 936

Haskell趣学指南1-3

 Haskell趣学指南 简介关于这个教程欢迎来到haskell趣学指南!阅读此文表明你正要学haskell。很好,来对地方了,先容我简单介绍一下这个教程。编写这个教程,一方面是为了巩固我自己对has...
  • zwjsatan
  • zwjsatan
  • 2010年04月27日 10:21
  • 6483

《趣学Python编程》笔记---第一部分:学习编程(3)

《趣学Python编程》是一本轻松、快速掌握Python编程的入门读物。全书分为3部分,共18章。第1部分是第1章到第12章,介绍Python编程基础知识,包括Python的安装和配置、变量、字符串、...
  • xiaotang_sama
  • xiaotang_sama
  • 2017年03月14日 19:27
  • 412

趣学算法系列-贪心算法

趣学算法系列-贪心算法声明:本系列为趣学算法一书学习总结内容,在此推荐大家看这本算法书籍作为算法入门, 原作者博客链接,本书暂无免费电子版资源,请大家支持正版第二章 贪心算法 一个贪心算法总是做...
  • wwlcsdn000
  • wwlcsdn000
  • 2017年11月21日 15:25
  • 1141

haskell 趣学指南笔记-1type and typeclass

几个type 类型 Int 有界 Integer无界,效率低于Int Float Double Bool Char 几个typeclass 类型 :t (==) (==)::(Eq ...
  • gruduate
  • gruduate
  • 2013年10月20日 18:48
  • 689
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Haskell趣学指南学习日记(3)
举报原因:
原因补充:

(最多只允许输入30个字)