显示类型声明,Haskell是不用定义类型的原因,很像python

想要确定某个表达式的类型

 *Main> :t 'a'
'a' :: Char
*Main> :t True
True :: Bool
*Main> :t "HELLo"
"HELLo" :: [Char]

可以用:t 显示

所以当我们定义一个函数时,可以加上类型声明。

body.hs函数

addthree::Int -> Int ->Int -> Int
addthree x y z =x+y+z
fac::Integer -> Integer
fac n= product [..n]
*Main> fac

Integer自带 高精度,内存大多,就能表示多大的数。。

类型类

Eq类

*Main> 'a'=='a'
True
*Main> /=
True
*Main>

Ord类 比较大小类。还有其他一些类

函数语法---模式匹配

类似c++Switch case

sayMe::Int-> String
sayMe ="One!"
sayMe ="Two!"
sayMe ="Three!"
sayMe ="Four!"
sayMe ="Five!"
sayMe x="Not between 1 and 5!"

调用

*Main> :l body
[ of ] Compiling Main ( body.hs, interpreted )
Ok, modules loaded: Main.
*Main> sayMe
"Five!"

自己写head函数

 head' :: [a]->a
head' []=error "Can call head on an empty list,dummy!"
head' (x:_)=x

As模式没看懂怎么回事,大概是自己调用自己??、

 firstletter :: String->String
firstletter ""="Empty string,whoops!"
firstletter all@(x:xs)="The first letter of" ++ all ++ " is " ++[x] *Main> firstletter "Dracula"
"The first letter ofDracula is D"
*Main>

哨卫,又好像case语句

 bkm:: Double->String
bkm bmi
| bmi<=18.5="1!"
| bmi<=25.0="2!"
| bmi<=30.0="3!"
| otherwise=">3" *Main> bkm 19.9
"2!"

where 关键字
 避免重复计算一个值

 bkm:: Double->Double->String
bkm weight height
| bmi<=skinny="1!"
| bmi<=normal="2!"
| bmi<=fat="3!"
| otherwise=">3!"
where bmi=weight/height^
skinny=18.5
normal=25.0
fat=30.0

模块内的代码注意对其,类似python

let语句:绑定语句在前,后面跟表达式

 *Main> (let a=;b=;c= in a*b*c,let foo="Hey";bar="there!" in foo++bar)
(,"Heythere!")

居然也有Case 表达式。。

好玩点的递归啊!

原来这里快速排序可以这样写,好简洁

 quicksort [] =[]
quicksort (x:xs)=
let small=[a|a<-xs,a<=x]
lager=[a|a<-xs,a>x]
in quicksort small++ [x] Prelude> :l body
[ of ] Compiling Main ( body.hs, interpreted )
Ok, modules loaded: Main.
*Main> quicksort [,,,,,,,,]
[,,,,,,,,]

虽然这个快排是这原始的那种吧,本身可能会有点问题,因为每次都是选择列表第一个元素,但是的确简洁啊

这篇博客主要计入自己开始入门Haskell的点滴。

写得不好,多多包涵!

Haskell 趣学指南 入门笔记(二)的更多相关文章

  1. 《Haskell趣学指南》

    <Haskell趣学指南> 基本信息 原书名:Learn You a Haskell for Great Good!: A Beginner's Guide 原出版社: No Starch ...

  2. [2017.02.21] 《Haskell趣学指南 —— Learning You a Haskell for Great Good!》

    {- 2017.02.21 <Haskell趣学指南 -- Learning You a Haskell for Great Good!> [官网](http://learnyouahas ...

  3. [2017.02.21-22] 《Haskell趣学指南 —— Learning You a Haskell for Great Good!》

    {- 2017.02.21-22 <Haskell趣学指南 -- Learning You a Haskell for Great Good!> 学习了Haskell的基本语法,并实现了一 ...

  4. haskell趣学指南笔记1

    网址:http://learnyouahaskell.com/ 中文版:http://learnyouahaskell-zh-tw.csie.org/zh-cn/ready-begin.html 在 ...

  5. 《Haskell趣学指南 Learn You a Haskell for Great Good!》-代码实验

    doubleMe x = x + x doubleUs x y = doubleMe x + doubleMe y doubleSmallNumber x = then x else x * doub ...

  6. netty权威指南学习笔记二——netty入门应用

    经过了前面的NIO基础知识准备,我们已经对NIO有了较大了解,现在就进入netty的实际应用中来看看吧.重点体会整个过程. 按照权威指南写程序的过程中,发现一些问题:当我们在定义handler继承Ch ...

  7. Haskell趣學指南--这个有意思

    正在慢慢了解不同于命令式的函数式语言. 希望能获得新的视野.. ~~~~~~~~~~~ http://learnyouahaskell-zh-tw.csie.org/zh-cn/ready-begin ...

  8. Hadoop权威指南学习笔记二

    MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...

  9. Shader 入门笔记(二) CPU和GPU之间的通信,渲染流水线

    渲染流水线 1)应用阶段(CPU处理) 首先,准备好场景数据(摄像机位置,视锥体,模型和光源等) 接着,做粗粒度剔除工作. 最后,设置好每个模型的渲染状态(使用的材质,纹理,shader等) 这一阶段 ...

随机推荐

  1. linux 下 jdk tar.gz 包安装方法

    JDK安装 tar.gz为解压后就可使用的版本,这里我们将jdk-7u3-linux-i586.tar.gz解压到/usr/local/下. 1.解压 解压到当前目录:$ tar -zxvf /opt ...

  2. Use EnCase to acquire data from a smartphone

    Yesterday someone asked me a question can EnCase acquire data from a smartphone, and my reply was &q ...

  3. 二级路由器设置为何要关闭DHCP服务

    因为如果不关闭dhcp的话会和一级路由相冲突,你这个因该是lan口的连接法吧,如果不然的话是不需要关闭dhcp功能的路由器和路由器的连接方法有两种,一种是wan口连,一种是lan口连方法1:WAN口连 ...

  4. css3为图片添加鼠标移入放大效果

    只需要为添加效果的图片定义一个伪类 img.zoom-img:hover { -webkit-transform: scale(1.15); -webkit-transition-timing-fun ...

  5. Web.config配置文件

    优点:Web.config配置文件使得ASP.NET应用程序的配置变得灵活高效和容易实现并为ASP.NET应用提供了可扩展的配置,使得应用程序能够自定义配置,同时还包括的优点有:配置设置易读性.更新的 ...

  6. iOS 开发经验谈,点击没响应事件

  7. php实现在线下载程序安装包功能

    在线下载程序安装包可以很方便在服务器端下载各种程序安装包(Discuz!.phpwind.Dedecms.WordPress....等一些常用程序)并存储在服务器,大大减少站长上传程序安装包时间.默认 ...

  8. [leetcode]_Merge Two Sorted Lists

    题目:合并两个有序单链表 思路:一开始想复杂了,以为必须在原链表上修改(绕来绕去还AC了,但是思路相当绕),其实没有,按照正常地合并两个数组同样的方法也对. 代码: public ListNode m ...

  9. mariadb主从复制架构学习笔记

    复制功用: 数据分布 负载均衡:读操作,适用于读密集型的应用 备份 高可用和故障切换 MySQL升级测试 在从服务器上有两个线程: I/O线程:从master请求二进制日志信息,并保存至中继日志 SQ ...

  10. 【漫画解读】HDFS存储原理(转载)

    以简洁易懂的漫画形式讲解HDFS存储机制与运行原理. 一.角色出演 如上图所示,HDFS存储相关角色与功能如下: Client:客户端,系统使用者,调用HDFS API操作文件;与NN交互获取文件元数 ...