显示类型声明,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. 通用简单的 分页 SQL

    select                ID,TITLE,CONTENT,USERNAME,REALNAME,UNIT,UNITID,NOWTIMES,ACCEPTERID,ACCEPTERNAM ...

  2. Linux:设置alias永久生效

    登录数据库每次要输入密码,如:[root@localhost ~]# mysql -p123456 觉得麻烦... 简单的方法可以设置别名:alias mysql="mysql -p1234 ...

  3. GUI异步编程之BackgroundWorker类

    GUI编程中,经常需要另建一个线程,在后台运行以完成某项工作,并不时地与界面主线程进行通信,以改变界面显示.BackgroundWorker类为此而生. BackgroundWorker类的主要成员: ...

  4. svn服务器搭建与配置

    http://www.cnblogs.com/armyfai/p/3985660.html

  5. jquery的上传控件uploadly,每行都有一个这样的控件对id选择器的使用

    1.先看看预览图 这个是我的页面,其中如果我没点击添加一行的时候,会把本来有的数据进行循环出来,这个时候每个记录都必须有个上传图片的按钮,但是jquery的uploadly这个控件只是锁定id的,至少 ...

  6. MVC5 Identity 自定义用户和角色

    看代码基本就都能看懂了,增加了两个用户详细信息的表,角色表增加两个字段页面中实现树形显示. //IdentityModels.cs using System.Data.Entity; using Sy ...

  7. PHP生成随机字符串包括大小写字母

    PHP生成随机字符串包括大小写字母,这里介绍两种方法: 第一种:利用字符串函数操作 <?php /** *@blog <www.phpddt.com> */ function cre ...

  8. recurse_array_change_key_case()递规返回字符串键名全为小写或大写的数组

    //递归返回字符串键名全为小写或大写的数组function recurse_array_change_key_case(&$input, $case = CASE_LOWER){    if( ...

  9. 自定义DatePicker,年月日,不显示其中某几项

    经过源码研究:该结构主要包含三个NumberPicker: private final NumberPicker mDayPicker; private final NumberPicker mMon ...

  10. pandas聚合和分组运算——GroupBy技术(1)

    数据聚合与分组运算——GroupBy技术(1),有需要的朋友可以参考下. pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个 ...