haskell学习笔记_函数
一开始学习函数式编程语言就被告知函数式编程语言是一种“定义式”的语言,而不是一种命令式的语言,在学习haskell的函数语法时,此感觉更加强烈,haskell的函数定义倾向于一种类似C++里面的switch /case 的语义,将函数所处理的事情分类,然后定义好每个分类该如何返回。所以我的函数笔记主要就haskell函数里的几种分类情况进行讨论:
- condition expression
语法类似于if then else ;允许嵌套,但是每个if 必须对应一个else 否则语法报错。示例如下:
--单一示例: abs 函数 abs :: Int -> Int abs x = if x>= 0 then x else -x
--嵌套示例 signum :: Int -> Int
signum x = if x > 0 then 1 else
if x == 0 then 0 else -1
2. Guarded equations
由一组成为guards的逻辑表达式组成,从上往下去try 每一个expression ,true则执行后面的语句(后面的语句不再执行),否则往下去try.Special case :otherwise 匹配所有的情况。如果没有匹配项,程序会报错(函数所有的分类语法都一样,如果没有匹配则会报错)。分类符号:“|” 读作 “such as”. 示例如下:
-- abs
abs :: Int -> Int
abs x | x >= x
otherwise -x
3. Pattern matching
pattern matching 的定义不是很清晰。不过我自己所理解的pattern matching 函数类型是:(function name + Syntactic expression + return result )^ .Syntactic expression 支持 Tuple patterns 、List patterns Integer patterns 等等。
Integer patterns 支持一种 n+k的形式,n为Int variable , k 为 Int constant .示例如下:
pre : Int -> Int
pre =
pre n+ = n
4 . Lambda expressions
匿名函数。示例如下:
add = λx -> (λy - > x + y)
5 .Sections
In general,if ⊕ is an operator,then expressions of the form( ⊕ ),(x ⊕ ),and ( ⊕ y) for arguments x and y are called sections, whose meaning as functions can be formalised using lambda expressions as follows :
(⊕) = λx → (λy → x ⊕ y)
(x ⊕) = λy → x ⊕ y
(⊕ y) = λx → x ⊕ y还有一些别的在函数中使用的比如 where 语句用于定义函数中使用的一些变量、let it be 语句、case 语句等。
haskell学习笔记_函数的更多相关文章
- jQuery源代码学习笔记_工具函数_noop/error/now/trim
jQuery源代码学习笔记_工具函数_noop/error/now/trim jquery提供了一系列的工具函数,用于支持其运行,今天主要分析noop/error/now/trim这4个函数: 1.n ...
- Matlab学习笔记 figure函数
Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...
- matlab学习笔记 bsxfun函数
matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下. ...
- Haskell学习-高阶函数
原文地址:Haskell学习-高阶函数 高阶函数(higher-order function)就是指可以操作函数的函数,即函数可以作为参数,也可以作为返回结果.有了这两个特性,haskell可以实现许 ...
- matlab学习笔记13_1 函数返回值
一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://blog.csdn.net/qq_36556 ...
- swift学习笔记2——函数、闭包
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- SSM框架学习笔记_第1章_SpringIOC概述
第1章 SpringIOC概述 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. 1.1 控制反转IOC IOC(inversion of controller)是一种概念 ...
- Python学习笔记之函数
这篇文章介绍有关 Python 函数中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中函数的使用技巧 1.函数文档 给函数添加注释,可以在 def 语句后面添加独立字符串,这样的注释被 ...
- Python学习笔记_我的参考网址
Python学习笔记, 下面记录网上搜到的可参考的网址: 一.关于Tkinter 1.Python3中tkinter模块使用方法详解 https://blog.csdn.net/Fighting_Bo ...
随机推荐
- BZOJ3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者
3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 47 Solve ...
- Spring MVC中各个filter的用法
转载:http://blog.csdn.net/qyp1314/article/details/42023725 Spring MVC中各个filter的用法 2014-12-19 09:08 105 ...
- JS学习之道:javascript keycode大全
keycode 8 = BackSpace BackSpace keycode 9 = Tab Tab keycode 12 = Clear keycode 13 = Enter ...
- [置顶] API相关工作过往的总结之整体介绍
此系列的总结文章,仅仅是我个人工作总结,有考虑不周之处还请各位同行多多指教. API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是 ...
- html中的banner自适应屏幕代码
<html> <head> <title>Title</title> <style> .bannerbox { width:100%; po ...
- linux loadavg详解(top cpu load)
目录 [隐藏] 1 Loadavg分析 1.1 Loadavg浅述 1.2 Loadavg读取 1.3 Loadavg和进程之间的关系 1.4 Loadavg采样 2 18内核计算loadavg存在的 ...
- 关于数据表命名为mysql保留的时候的操作
今天操作数据表的时候,发现order数据表无法进行操作,必须加上反单引号才能进行操作,查了一下原因: 反引号是用来区别mysql关键字的,比如,如果你有一个表名叫select,你就必须写成`selec ...
- 几款命令行工具(CMD)增强软件
如果经常要与 命令行工具(CMD)打交道,推荐几款工具来增强与替代 Windows 默认的 CMD. 1.PowerCMD 优点:老牌软件,功能强大,支持自定义配色方案,目前最新版本为 2.2: 缺点 ...
- autochannel 指定栏目
(> DedeCMS 4,DedeCMS5) 名称:autochannel 功能:指定排序位置的单个栏目的链接 语法: {dede:autochannel partsort='2' typeid ...
- 手机软件记事本(SuperNotepad)的使用教程
软件简介: 手机应用记事本(SuperNotepad)类似电脑应用notepad, 可用于文本阅读和编辑新建电子书(本应用限文本txt文件),是阅读小说和便签记录的好帮手. 电子书阅读器及便签的手机应 ...