haskell中的let和where
haskell中有两种定义局部变量的方法let和where,方法分别如下
roots a b c = ((-b + det) / (a2), (-b - det) / (a2))
where det = sqrt(b*b-*a*c)
a2 = *a
roots a b c = let det = sqrt (b*b - *a*c)
a2 = *a
in ((-b + det) / a2, (-b - det) / a2)
这两种方法都可以使全局变量定义失效
det = "Hello World"
roots a b c =((-b + det) / (*a), (-b - det) / (*a))
where det = sqrt(b*b-*a*c)
roots' a b c=
let det = sqrt(b*b-*a*c)
in ((-b + det) / (*a), (-b - det) / (*a))
f _ = det
*Main> roots
(-1.0,-2.0)
*Main> roots' 1 3 2
(-1.0,-2.0)
*Main> f 'a'
"Hello World"
对于let和where混用,那么是let的优先级高,也就是说优先使用let定义的变量,而不是where定义的变量,比如
f x =
let y = x+
in y
where y = x+
*Main> f
等于11而不是12
对于let和where,同样也支持模式匹配,例如
showmoney2 a b c=
(create a )+(create b )+(create c)
where create _ _=
create _ _=
create _ _ = showmoney a b c=
let create _ _=
create _ _=
create _ _ =
in (create a ) + (create b ) + (create c)
*Main> showmoney *Main> showmoney2
haskell中的let和where的更多相关文章
- haskell中的monad
monad本意是单子.在haskell中,第一个接触的基本都是IO action,通过把IO动作包装起来我们能很方便的与现实世界进行数据交换.但其实monad的用途不止如此,monad还能讲一系列操作 ...
- haskell中的do
在haskell中,有一个do的语句专门用来做一些不那么“干净”的事情,比如读写都需要用do来开头 一开始以为do的作用是做monad,后来发现是错误的,其实do做的事情是包裹一个顺序操作 比如在如下 ...
- haskell中的cps
cps全称叫continuation passing style,简要来讲就是告诉函数下一步做什么的递归方式,由于普通递归有栈溢出的问题,而cps都是尾递归(tail recursion),尾递归则是 ...
- Haskell中cabal install glib遇到的问题
1. 运行命令cabal install glib时出现错误: Cannot find gtk2hsC2hs Please install `gtk2hs-buildtools` first and ...
- Haskell 笔记 ③
①循环?NO!请递归思考问题! 手艹一个求列表中最大值代码,C语言中习惯性for扫一下比较出最大值.但是可以用递归! maximum'::(Ord a)=>[a]->a maximum' ...
- haskell io模块
haskell中的io模块主要是用于读写文件屏幕的,通过import IO来导入 其中有如下常用定义 data IOMode = ReadMode | WriteMode | AppendMode | ...
- Haskell 与范畴论
说到 Haskell,这真是一门逼格极高的编程语言,一般初学者如果没有相关函数式编程的经验,入门直接接触那些稀奇古怪的概念,简直要跪下.现在回想起来,隐隐觉得初学者所拥有的命令式编程语言(impera ...
- JavaScript中的Partial Application和Currying
这篇文章是一篇学习笔记,记录我在JS学习中的一个知识点及我对它的理解,知识点和技巧本身并不是我原创的.(引用或参考到的文章来源在文末) 先不解释Partial Application(偏函数应用)和C ...
- NullableKey:解决Dictionary中键不能为null的问题 zt
2012-12-29 02:26 by 老赵, 1745 visits 众所周知,.NET中Dictionary的键不能为null,否则会抛出NullReferenceException,这在某些时候 ...
随机推荐
- <meta http-equiv="refresh" content="0; url=">是什么意思?
页面定期刷新,如果加url的,则会重新定向到指定的网页,content后面跟的是时间(单位秒),把这句话加到指定网页的<head></head>里一般也用在实时性很强的应用中, ...
- HTML中的下拉列表 select
HTML中的下拉列表: <select> <option value ="1">Volvo</option> <option value ...
- linux基础知识(四)
•查看ip地址,ifconfig命令 •重启.启动.停止网络命令 •service network restart/start/stop •VMnet0:用于虚拟桥接网络下的虚拟交换机 •VMne ...
- 你还没成为Delphi QC的成员吗?(转红鱼儿)
Delphi很早就建立了quality.embarcadero.com,简称为QC,质量控制中心,用来接收用户反馈的bug,新功能建议等,是开发者与delphi官方直接交流的平台.无论是否为正版用户, ...
- 一步步编写avalon组件02:分页组件
本章节,我们做分页组件,这是一个非常常用的组件.grid, listview都离不开它.因此其各种形态也有. 本章节教授的是一个比较纯正的形态,bootstrap风格的那种分页栏. 我们建立一个ms- ...
- 为什么匿名内部类和局部内部类只能访问final变量
因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或 ...
- VC MFC在CMFCToolBar工具栏中加入组合框
如何在CMFCToolBar工具栏中加入组合框等控件,且先看在线MSDN上怎么说的: 要增加一个组合框,需要完成以下步骤: 1.在工具栏资源中,增加一个对应ID资源号的按钮. 2.在主框架(mainf ...
- LCD如何显示图像
1.LCD显示主要相关概念 (1)像素(pixel) 整个图像是由一个个的像素组成的,像素就是一个显示点.像素就是组成图像的最基本元素,或者说显示中可以被控制的最小单位,整个图像就是由很多个像素组成的 ...
- return exit _exit
(1)进程终止: C程序的终止分为两种:正常终止和异常终止. 正常终止分为: return, exit, _exit, _Exit, pthreade_exit. 异常中指分为: abort, SIG ...
- RPC应用的java实现(转)
一.RPC介绍 什么是RPC?Remote Procedure Call,远程过程调用.也就是说,调用过程代码并不是在调用者本地运行,而是要实现调用者与被调用者二地之间的连接与通信.比较严格的定义是: ...