Haskell基础知识

Table of Contents

  • 1 Haskell 基本知识

    • 1.1 Haskell 开发环境安装
    • 1.2 Haskell 代码如何运行
    • 1.3 Haskell 函数定义和使用
    • 1.4 Haskell 基本语句和编程模式

1 Haskell 基础知识

1.1 Haskell 开发环境安装

  • 见《Haskell Platform安装过程》

1.2 Haskell 代码如何运行

  • 代码
-- helloWorld.hs
-- 定义名为hi的函数
hi = "hello, world!"
  • 运行
$ ghci
GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
ghci>:l helloWorld.hs
[1 of 1] Compiling Main             ( helloWorld.hs, interpreted )
Ok, modules loaded: Main.
ghci>hi
"hello, world!"

1.3 Haskell 函数定义和使用

-- function.hs
doubleMe x = x + x
doubleUs x y = doubleMe x + doubleMe y
ghci>:l function.hs
[1 of 1] Compiling Main             ( function.hs, interpreted )
Ok, modules loaded: Main.
ghci>doubleMe 2
4
ghci>doubleUs 3 4
14

1.4 Haskell 基本语句和编程模式

  • if语句
maxNumber x y = if x > y then xelse y
ghci>:l baseStruc.hs
[1 of 1] Compiling Main             ( baseStruc.hs, interpreted )
Ok, modules loaded: Main.
ghci>maxNumber 3 5
5
ghci>maxNumber 5 3
5
  • case语句
isLucky x = case x of 1 -> "1:lucky"2 -> "2:No lucky"otherwise -> "lucky"
ghci>isLucky 1
"1:lucky"
ghci>isLucky 2
"2:No lucky"
ghci>isLucky 3
"lucky"
ghci>isLucky 4
"lucky"
  • let语句
doubleSum x y =let doublex = 2 * xdoubley = 2 * yin doublex + doubley
ghci>doubleSum 3 4
14
ghci>doubleSum 1 2
6
  • where语句
doubleSum2 x y = doublex + doubleywhere doublex = 2 * xdoubley = 2 * y
ghci>doubleSum2 1 2
6
ghci>doubleSum2 2 3
10
  • 模式匹配(Pattern Matching)

例1

lucky 7 = "You are lucky"
lucky x = "Sorry, you are not lucky"
ghci>lucky 7
"You are lucky"
ghci>lucky 1
"Sorry, you are not lucky"
ghci>lucky 2
"Sorry, you are not lucky"

例2

foo 0 x = (-1) * x
foo 1 x = x
foo x y = 0
ghci>foo 1 2
2
ghci>foo 2 3
0
ghci>foo 3 4
0
ghci>foo 0 2
-2

例3

foo' 0 x = (-1) * x
foo' x y = 0
foo' 1 x = x
ghci>foo' 1 2
0
ghci>foo' 1 3
0
ghci>foo' 2 3
0
ghci>foo' 3 4
0
ghci>foo' 0 2
-2
  • 门卫(Guard)

例1

mdivide x y| y == 0 = "Can not divide"| x / y > 10 = "first number is larger than the second number"| x / y < 1  = "first number is less than the second number"| otherwise = "almost equal"
ghci>mdivide 3 0
"Can not divide"
ghci>mdivide 3 2
"almost equal"
ghci>mdivide 30 2
"first number is larger than the second number"
ghci>mdivide 3 5
"first number is less than the second number"

例2

mdivide' x y| x / y > 10 = "first number is larger than the second number"| y == 0 = "Can not divide"| x / y < 1  = "first number is less than the second number"| otherwise = "almost equal"
ghci>mdivide' 3 0
"first number is larger than the second number"
ghci>mdivide' 3 1
"almost equal"
ghci>mdivide' 30 3
"almost equal"
ghci>mdivide' 30 2
"first number is larger than the second number"
ghci>mdivide' 2 3
"first number is less than the second number"
  • 递归(Recursion)

注:理解门卫与递归如何结合在一起工作

msum x y| x > y = msum y x| x == y = x| otherwise = x + msum (x+1) y
ghci>msum 1 100
5050
ghci>msum 2 4
9
ghci>msum 100 1
5050

转载于:https://www.cnblogs.com/Iambda/archive/2013/01/31/3933509.html

「学习总结-Haskell-1」Haskell 基础知识相关推荐

  1. 「专升本信息技术」计算机基础知识单选题集 (12)

    [01]八进制数64转换成十进制数,正确答案是() A.50        B.49        C.52        D.53 [C]对于任何一个二进制数.八进制数.十六进制数,均可以先写出它的 ...

  2. 「专升本信息技术」计算机基础知识单选题集 (13)

    [01]下列不属于物联网应用的是() A.通过手机远程控制家中多个电器的运行        B.电视遥控器遥控电视        C.智能公交系统        D.快递物品的位置查询服务 [B]电视 ...

  3. 「专升本信息技术」计算机基础知识单选题集 (09)

    [01]软件与程序的区别在于() A.程序就是软件,软件就是程序        B.程序是由用户自己编写的,而软件是由厂家提供的        C.程序是用高级语言编写的,而软件用机器语言编写的    ...

  4. 「专升本信息技术」计算机基础知识习题(2)

    一.单项选择题 1.  1946年2月,在美国宾夕法尼亚大学第一台真正意义上的电子数字计算机()正式投入运行,它的诞生开辟了一个信息时代的新纪元. A.ENVDC B.ENIAC C.IBM-PC D ...

  5. pwn学习总结(四)—— 堆基础知识(持续更新)

    pwn学习总结(四)-- 堆基础知识(持续更新) 前言 chunk 使用中(分配后) 空闲中(释放后) 堆块大小 空间复用 bins fastbin unsorted bin small bin 前言 ...

  6. Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型、符号、运算符、数组Array总结之详细攻略

    Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组Array总结之详细攻略 目录 Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组总 ...

  7. 3D视觉学习计划之PCL库的基础知识

    3D视觉学习计划之PCL库的基础知识 一.PCL库的概述 PCL是一个大型跨平台开源C++编程库,它在吸收了前人点云相关研究基础上建立起来,实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取. ...

  8. 从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)

    从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数) 一. 向量的内积与外积 二. 旋转与平移 2.1 旋转表示 --- 旋转矩阵R 2.2 平移向量 2.3 变换矩阵T与齐次坐标 2. ...

  9. Kotlin学习(一):Kotlin基础知识

    Kotlin学习(一):Kotlin基础知识 定义变量常量 在Kotlin中,定义变量时有以下几点与java不同: 位置不同:在 Kotlin 中,数据类型要放到变量后面,并且用冒号(:)分隔,这正好 ...

  10. 学习Spring必学的Java基础知识

    学习Spring必学的Java基础知识(1)----反射 引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Jav ...

最新文章

  1. python socket tcp客户端_python网络编程socketserver模块(实现TCP客户端/服务器)
  2. 浏览器显示XML文档
  3. python库(包)查找网站
  4. 主产品清单位于oracle,OPatch failed with error code 73(OracleHomeInventory gets null oracleHomeInfo)...
  5. 对硬盘进行分区和格式化
  6. python一次性输入3个数_python实现输入数字的连续加减方法
  7. 必知必会 | 关于Redis缓存这三大问题,必知必会
  8. 计算机python指什么_Python是什么?
  9. SAP License:搽皮鞋的提示
  10. 【转】强大的在线书库
  11. smartprinter注册版_SmartPrinter免费版
  12. java计算机毕业设计商品货物信息管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  13. 线性代数【13】基,基本向量、坐标系的构建和线性生成空间SPAN (向量线性相关)
  14. Java读取相片信息
  15. 计算机三级网络几时出成绩,全国计算机等级考试成绩查询时间是什么时候?
  16. mysql排名第一_SQL查询排名第二名的信息
  17. 【Leetcode刷题】35.搜索插入位置
  18. 360°全景影像切片和POI管理
  19. [分享]在线的代码片段测试工具 jsbin
  20. 车载多传感器融合定位方案Pipeline:IMU,CNSS,LIDAR

热门文章

  1. 连接器 SM05B-PASS-TBT R/A 5POS 2MM SMD
  2. 十月末婚礼展示:“美好Lan图”派对式小型婚礼【奥帆婚礼顾问】
  3. 双系统如何远程切换设置
  4. Java读取mapinfo格式_求助:如何把mapinfo格式的地图数据放到网页中显示
  5. 是男人就下100层【第一层】——高仿微信界面(8)
  6. TRIZ创新方法——技术矛盾机器解决原理
  7. 机器学习是什么?我对机器学习的理解
  8. ARM汇编MSR和MRS
  9. 技术驱动才是2B市场的主旋律
  10. 计算机毕业设计基于Springboot+vue口腔牙科诊所管理系统——计算机毕业设计