「学习总结-Haskell-1」Haskell 基础知识
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 基础知识相关推荐
- 「专升本信息技术」计算机基础知识单选题集 (12)
[01]八进制数64转换成十进制数,正确答案是() A.50 B.49 C.52 D.53 [C]对于任何一个二进制数.八进制数.十六进制数,均可以先写出它的 ...
- 「专升本信息技术」计算机基础知识单选题集 (13)
[01]下列不属于物联网应用的是() A.通过手机远程控制家中多个电器的运行 B.电视遥控器遥控电视 C.智能公交系统 D.快递物品的位置查询服务 [B]电视 ...
- 「专升本信息技术」计算机基础知识单选题集 (09)
[01]软件与程序的区别在于() A.程序就是软件,软件就是程序 B.程序是由用户自己编写的,而软件是由厂家提供的 C.程序是用高级语言编写的,而软件用机器语言编写的 ...
- 「专升本信息技术」计算机基础知识习题(2)
一.单项选择题 1. 1946年2月,在美国宾夕法尼亚大学第一台真正意义上的电子数字计算机()正式投入运行,它的诞生开辟了一个信息时代的新纪元. A.ENVDC B.ENIAC C.IBM-PC D ...
- pwn学习总结(四)—— 堆基础知识(持续更新)
pwn学习总结(四)-- 堆基础知识(持续更新) 前言 chunk 使用中(分配后) 空闲中(释放后) 堆块大小 空间复用 bins fastbin unsorted bin small bin 前言 ...
- Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型、符号、运算符、数组Array总结之详细攻略
Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组Array总结之详细攻略 目录 Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组总 ...
- 3D视觉学习计划之PCL库的基础知识
3D视觉学习计划之PCL库的基础知识 一.PCL库的概述 PCL是一个大型跨平台开源C++编程库,它在吸收了前人点云相关研究基础上建立起来,实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取. ...
- 从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)
从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数) 一. 向量的内积与外积 二. 旋转与平移 2.1 旋转表示 --- 旋转矩阵R 2.2 平移向量 2.3 变换矩阵T与齐次坐标 2. ...
- Kotlin学习(一):Kotlin基础知识
Kotlin学习(一):Kotlin基础知识 定义变量常量 在Kotlin中,定义变量时有以下几点与java不同: 位置不同:在 Kotlin 中,数据类型要放到变量后面,并且用冒号(:)分隔,这正好 ...
- 学习Spring必学的Java基础知识
学习Spring必学的Java基础知识(1)----反射 引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Jav ...
最新文章
- python socket tcp客户端_python网络编程socketserver模块(实现TCP客户端/服务器)
- 浏览器显示XML文档
- python库(包)查找网站
- 主产品清单位于oracle,OPatch failed with error code 73(OracleHomeInventory gets null oracleHomeInfo)...
- 对硬盘进行分区和格式化
- python一次性输入3个数_python实现输入数字的连续加减方法
- 必知必会 | 关于Redis缓存这三大问题,必知必会
- 计算机python指什么_Python是什么?
- SAP License:搽皮鞋的提示
- 【转】强大的在线书库
- smartprinter注册版_SmartPrinter免费版
- java计算机毕业设计商品货物信息管理系统源码+系统+数据库+lw文档+mybatis+运行部署
- 线性代数【13】基,基本向量、坐标系的构建和线性生成空间SPAN (向量线性相关)
- Java读取相片信息
- 计算机三级网络几时出成绩,全国计算机等级考试成绩查询时间是什么时候?
- mysql排名第一_SQL查询排名第二名的信息
- 【Leetcode刷题】35.搜索插入位置
- 360°全景影像切片和POI管理
- [分享]在线的代码片段测试工具 jsbin
- 车载多传感器融合定位方案Pipeline:IMU,CNSS,LIDAR