博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Haskell 笔记 ②
阅读量:7070 次
发布时间:2019-06-28

本文共 1356 字,大约阅读时间需要 4 分钟。

如何写一个求阶层函数?

   fac 0 =1

   fac n=n*fac(n-1)

   函数自适应匹配参数,可以把特判情况写在前面,注意按顺序匹配的,n这种万能情况写在最前面就完蛋了。同时你也注意到,函数只能一行写完,不能智能识别作用域啊!!

②灵活的使用你的函数参数!

看这个求三元组第三个值的函数,占位符_的神奇使用。

third::(a,b,c)->c

third (_,_,c)=c

更神奇的手艹head函数, (x:_)中占位符模拟出了列表的剩余部分

head’::[a]->a

head’ (x:_) =x

若是固定长度的列表,可以这么写head’ (x:y:[] ) =x 或者 head [x,y]=x

As模式(填坑中,看不懂)

④利用哨位(Guard)写出一个优美的递归程序, | 后面的那个布尔式叫哨位

fac n

  | n==1 = 1

  | n==2 = 2

  |otherwise =n*fac(n-1)

尽管函数式语言不允许全局变量存在(全局就变成函数了,函数是确定,不可修改的)但是一个函数的尾部可以用where开设一个只赋值一次且作用域只是本函数的变量区,方便值一次计算多次,重复使用,用完销毁,变量区的变量必须对齐了,不然编译错。

fac n

  | n==1 = x

  | n==2 = y

  |otherwise =n*fac(n-1)

  where x=n*2

       y=n*3

where的一次赋值特性其实表明它本体就是个函数,所以支持函数的匹配特性

where (f:_)=”2333”

     (s:_)=”3223”

where的老婆let

我们知道let可以定义一个常量(函数),函数中let更是where的好妻子,其实它们就是倒过来而已。

看这个代码:

f length width height=

   let s=length*width

   in v=s*height

先开变量区,最后in进行表达式求值。

俗话说女人拥有社会最高权力,let..in 可以脱离函数使用,求个值~

let还支持分号和逗号,挤空间什么的。

let a=1;b=2;c=3 in a+b+c,let d=4 in a+b+c+d

列表表达式的条件区也可以写let,不过此时let式子不是过滤,而是计算作用了

f xs=[ans|x<-xs,let ans=x^2]

⑥简便而灵活的case .. of

C语言中的swich/case用法,不过这里的使用更加灵活,其实就是按顺序的模式匹配

f::String->String

f str = "hello" ++ case str of  "world" ->" world"

                         "fuck"->" bi~"

                          ""->" none"

还记得where不?前面说where开辟的其实就是一块函数区,那么这里可以这么改写, YYwhat函数而不用考虑类型。

f::String->String

f str = "hello" ++ what str

      where what "world"=" world"

            what "fuck"=" ~bi"

            what ""=" none"

 

转载于:https://www.cnblogs.com/neopenx/p/4276176.html

你可能感兴趣的文章
HTML5存储技术Storage
查看>>
经典排序算法(Java版)
查看>>
Oracle/PLSQL FOR Loop
查看>>
6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器...
查看>>
全国代收货款平台-快递鸟、菜鸟
查看>>
Codeforces Round #305 (Div. 2) D. Mike and Feet
查看>>
上海买车流程
查看>>
struts2的集合标签
查看>>
如何绕过安全狗
查看>>
win7下安装配置tomcat,java运行环境
查看>>
谈谈Ext JS的组件——布局的使用方法
查看>>
【物联网智能网关-09】CAN总线通信演示(TinyGUI触屏)
查看>>
为SQL Server 2012配置镜像注意事项及采用SSD硬盘作为数据库存储磁盘
查看>>
Skype for Business Server 2015-04-前端服务器-7-部署
查看>>
Forefront Client Security部署及配置
查看>>
运维实战案例之“Argument list too long”错误与解决方法
查看>>
自动化测试工具QTP(QuickTest)10.0的安装
查看>>
这个时代会残酷惩罚不肯改变的人
查看>>
掌握Android中的进程和线程
查看>>
centos 5.7_64位下安装FastDFS_v3.06分布式文件系统
查看>>