Haskell 趣学指南 入门笔记(二)
显示类型声明,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 趣学指南 入门笔记(二)的更多相关文章
- 《Haskell趣学指南》
<Haskell趣学指南> 基本信息 原书名:Learn You a Haskell for Great Good!: A Beginner's Guide 原出版社: No Starch ...
- [2017.02.21] 《Haskell趣学指南 —— Learning You a Haskell for Great Good!》
{- 2017.02.21 <Haskell趣学指南 -- Learning You a Haskell for Great Good!> [官网](http://learnyouahas ...
- [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的基本语法,并实现了一 ...
- haskell趣学指南笔记1
网址:http://learnyouahaskell.com/ 中文版:http://learnyouahaskell-zh-tw.csie.org/zh-cn/ready-begin.html 在 ...
- 《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 ...
- netty权威指南学习笔记二——netty入门应用
经过了前面的NIO基础知识准备,我们已经对NIO有了较大了解,现在就进入netty的实际应用中来看看吧.重点体会整个过程. 按照权威指南写程序的过程中,发现一些问题:当我们在定义handler继承Ch ...
- Haskell趣學指南--这个有意思
正在慢慢了解不同于命令式的函数式语言. 希望能获得新的视野.. ~~~~~~~~~~~ http://learnyouahaskell-zh-tw.csie.org/zh-cn/ready-begin ...
- Hadoop权威指南学习笔记二
MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...
- Shader 入门笔记(二) CPU和GPU之间的通信,渲染流水线
渲染流水线 1)应用阶段(CPU处理) 首先,准备好场景数据(摄像机位置,视锥体,模型和光源等) 接着,做粗粒度剔除工作. 最后,设置好每个模型的渲染状态(使用的材质,纹理,shader等) 这一阶段 ...
随机推荐
- aspx网页相对布局
网页的布局 <body bgcolor="#b6b7bc"> <form id="form1" runat="server" ...
- Python之路【第五篇】:面向对象及相关
Python之路[第五篇]:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否 ...
- objective-C运算符和表达式
运算符可以分为以下几种: 算术运算符:+,-,*,/,%,++,—-. 关系运算符:<,>,<=,>=,==,!= 布尔逻辑运算符:!,&&,|| 位运算符:| ...
- Android图表
最近需要用到Android里面的折现图,因此在这方面也去做了一些调研.总体发现Android对报表的支持还是非常好的.总体上去研究了两个实现方案,一个是利用Android提供的的AChartEngin ...
- VMware虚拟机升级过程中遇到的一点问题
在将VWware由9.0升级到10.0的过程中,出现如下图的错误: failed to create the requested registry key Key:Installer e ...
- 自适应游标共享技术02(一个简单的例子来走近ACS)
为了不让其他因素干扰实验,参数设置如下: optimizer_mode=ALL_ROWS(使用CBO) optimizer_features_enable=11.2.0.3(使用最新的优化参数) op ...
- AngularJs记录学习04
<html> <head> <title>Angular JS Views</title> <script src="js/Angula ...
- ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中(四)
这是第四步点击保存将信息存入数据库中. 这个就简单了利用ajax将JSON字符串传到后台然后这里有个知识点就是将DataTable直接存入数据库中.代码如下: 一.界面获取数据JS代码: //保存订单 ...
- Android--获取标题栏,状态栏,屏幕高度
获取状态栏高度 Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int ...
- hdu 5444 Elven Postman
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Description Elves are very peculia ...