一开始学习函数式编程语言就被告知函数式编程语言是一种“定义式”的语言,而不是一种命令式的语言,在学习haskell的函数语法时,此感觉更加强烈,haskell的函数定义倾向于一种类似C++里面的switch /case 的语义,将函数所处理的事情分类,然后定义好每个分类该如何返回。所以我的函数笔记主要就haskell函数里的几种分类情况进行讨论:

  1. 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学习笔记_函数的更多相关文章

  1. jQuery源代码学习笔记_工具函数_noop/error/now/trim

    jQuery源代码学习笔记_工具函数_noop/error/now/trim jquery提供了一系列的工具函数,用于支持其运行,今天主要分析noop/error/now/trim这4个函数: 1.n ...

  2. Matlab学习笔记 figure函数

    Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...

  3. matlab学习笔记 bsxfun函数

    matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下. ...

  4. Haskell学习-高阶函数

    原文地址:Haskell学习-高阶函数 高阶函数(higher-order function)就是指可以操作函数的函数,即函数可以作为参数,也可以作为返回结果.有了这两个特性,haskell可以实现许 ...

  5. matlab学习笔记13_1 函数返回值

    一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://blog.csdn.net/qq_36556 ...

  6. swift学习笔记2——函数、闭包

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  7. SSM框架学习笔记_第1章_SpringIOC概述

    第1章 SpringIOC概述 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. 1.1 控制反转IOC IOC(inversion of controller)是一种概念 ...

  8. Python学习笔记之函数

    这篇文章介绍有关 Python 函数中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中函数的使用技巧 1.函数文档 给函数添加注释,可以在 def 语句后面添加独立字符串,这样的注释被 ...

  9. Python学习笔记_我的参考网址

    Python学习笔记, 下面记录网上搜到的可参考的网址: 一.关于Tkinter 1.Python3中tkinter模块使用方法详解 https://blog.csdn.net/Fighting_Bo ...

随机推荐

  1. HDOJ(HDU) 1406 完数

    Problem Description 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3:28=1+2+4+7+14. 本题的任务是 ...

  2. HDU_2023——求平均成绩

    Problem Description 假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量. ...

  3. mysql优化整理(索引)

    什么是索引? 索引是表记录的单个或多个字段重新组织的一种方法,其目的是提高数据库的查询速度,本质上就是一种数据结构. 索引的类型:primary(主键).secondary(其他) 索引的数据结构 I ...

  4. IntelliJ IDEA常见问题及解决方法

    1.IDEA导入项目后,源码.java文件图标带有红色圆圈,圆圈中间是个J: 该现象的原因是由于项目未把该路径指定为源码路径.解决方法: 在project Structure中(快捷键ctrl+alt ...

  5. MVC 4.0语法 自动分页

    4.0语法中实现自动分页只需要两个方法即可,Skip() ----跳过序列中指定的元素,Take()-----从序列的开头返回指定数量元素. 一般用自动分页都是无刷新的,可以把显示的数据,用局部页面封 ...

  6. 你需要知道的九大排序算法【Python实现】之堆排序

    六.堆排序 ​堆排序是一种树形选择排序,是对直接选择排序的有效改进. ​堆的定义下:具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(h ...

  7. Android经常使用的五种弹出对话框

    一个Android开发中经常使用对话框的小样例,共同拥有五种对话框:普通弹出对话框,单选对话框,多选对话框,输入对话框及进度条样式对话框: <LinearLayout xmlns:android ...

  8. ETL几种方案对比

  9. ViewDragHelper详解

    2013年谷歌i/o大会上介绍了两个新的layout: SlidingPaneLayout和DrawerLayout,现在这俩个类被广泛的运用,其实研究他们的源码你会发现这两个类都运用了ViewDra ...

  10. vb.net转换为C#方法

    第一个方法是上面有人说过的,用VB.NET TO C#的在线转换工具.既然你说不好用,那么可以这样:你把VB.NET代码编译了,然后用工具反编译(IL spy,reflector等)成C#代码.