Discrete Mathematics Using a Computer的第一章Introduction to Haskell进行总结。环境Windows,关于函数的部分太长了,分开写。


常用的对列表list操作的函数common functions on lists

length :: [a] -> Int  --返回list中元素的数量

or :: [Bool] -> Bool --对Bool的list中的所有元素进行||,如果有True,则时True

and :: [Bool] -> Bool --对Bool的list中的所有元素进行&&,如果有False,则False

(!!) :: [a] -> Int -> a --返回指定下标的元素,下标从0开始,如:

  [1, 2, 3] !! 0 => 1

  "abcde" !! 2 => 'c'

elem :: Eq a => a -> [a] -> Bool --判断该元素是否在list中,在则True,不再则False

null :: [a] -> Bool --判断list是否为空,空则True,非空则False

head 和 tail对list[1,2,3,4,5,6,7,8,9,10]的结果是:

      1    [2, 3, 4, 5, 6, 7, 8, 9, 10]
  head --' <--------------tail-------------->

last 和 init对list[1,2,3,4,5,6,7,8,9,10]的结果是:

    [1, 2, 3, 4, 5, 6, 7, 8, 9]    10
  <---------------init------------> '-- last

take :: Int -> [a] -> [a] --从list中取出指定数量的元素,如:

  take 0 [1, 2, 3] => []

  take 2 [1, 2, 3] => [1, 2]

drop :: Int -> [a] -> [a] --从list中去除指定数量的元素,如:

  drop 2 [1, 2, 3] => [3]

  drop 0 [1, 2, 3] => [1, 2, 3]

(++) :: [a] -> [a] -> [a] --将两个相同类型的list连接在一起,如:

  [1, 2] ++ [3, 4, 5] => [1, 2, 3, 4, 5]

  [] ++ "abc" => "abc"

map :: (a -> b) -> [a] -> [b] --将原本只对一个元素应用的操作,应用到该list的所有元素中,类似于C的for循环。如:

  map toUpper "the cat and dog" => "THE CAT AND DOG"

  map (* 10) [1, 2, 3] => [10, 20, 30]

filter :: (a -> Bool) -> [a] -> [a] --将list中结果为False的筛选除去留下结果为True的元素,如:

  

zip :: [a] -> [b] -> [(a, b)] --分别从[a]和[b]中取出元素两两配对pair(2-tuples),一方用完后,另一方剩余的舍弃掉,如:

  

zipWith :: (a -> b -> c) -> [a] -> [b] -> [c] --分别从[a]和[b]中取出元素作为a的参数,多余的舍弃。如:

  

fold function: 和map类似,但结果是一个值,有3个参数:操作符 a list。a作为默认值,该函数是从a和list的一个元素进行操作符计算然后和下一个list中的元素进行操作,最终得出一个值,分为foldl和foldr对应了从list的不同方向进行操作。因为有a的存在保证的对空list也能进行操作,其结果就是a。

foldl :: (a -> b -> b) -> b -> [a] -> b  {-

  从[a]的左端开始进行操作, 如 foldl (-) a [p, q, r, s]

(-) a p    ------------1 注意a在左侧

                                                          (-) (          ) q -----------2

                (-) (                    ) r --------3

              (-)  (                               ) s ----4

  -}

foldr :: (a -> b -> b) -> b -> [a] -> b {-

  从[a]的右端开始进行操作, 如 foldr (-) a [p, q, r, s]

                                                                          (-) s a --------1 注意a在右侧

                          (-) r (           ) -------2

                   (-) q (                       ) ----3

(-) p (                                  ) ---4

    -}

   

. 操作(the composition operator),相当于连续进行2个函数操作:函数2.函数1 a ,先执行函数1 a,再将其结果作为函数2的参数。如:

  

                  

初识Haskell 四:函数function之二 常见函数的更多相关文章

  1. JavaScript学习总结(四)function函数部分

    转自:http://segmentfault.com/a/1190000000660786 概念 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. js 支持两种函数:一类是语言内部的函数 ...

  2. JavaScript入门-函数function(二)

    JavaScript入门-函数function(二) 递归函数 什么是递归函数? 递归简单理解就是,在函数体里,调用自己. //我们在求一个10的阶乘的时候,可能会这么做 //写一个循环 var to ...

  3. Javascript学习之函数(function)

    在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...

  4. 一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(四) --高级设置二

    原文:一个完整的Installshield安装程序实例-艾泽拉斯之海洋女神出品(四) --高级设置二 上一篇:一个完整的安装程序实例—艾泽拉斯之海洋女神出品(三) --高级设置一4. 根据用户选择的组 ...

  5. C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)

    上一讲<C++11 并发指南四(<future> 详解一 std::promise 介绍)>主要介绍了 <future> 头文件中的 std::promise 类, ...

  6. 孤荷凌寒自学python第十七天初识Python的函数

    孤荷凌寒自学python第十七天初识Python的函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 函数是能够完成指定运算并返回运算结果的代码块.是结构化编程重要的结构. 我首先发现pyt ...

  7. 分分钟钟学会Python - 函数(function)

    函数(function) 1 基本结构 本质:将多行代码拿到别处并起个名字,以后通过名字就可以找到这行代码并执行 应用场景: 代码重复执行 代码量很多超过一屏,可以选择通过函数进行代码的分割 写代码方 ...

  8. 函数 FUNCTION

    函数 FUNCTION 定义: 带名字的代码块,用于执行具体任务. 注意: 应给函数指定描述性名称,只是用小写字母和下划线. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何 ...

  9. 深入理解javascript中的立即执行函数(function(){…})()

    投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-06-12 我要评论 这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是 ...

随机推荐

  1. Android多Module下的Application引用方式

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 Android开发时,Application一般都放在APP中,Lib模块如果想引用Application则需要在APP中进行传递, ...

  2. XML的创建、解析-C语言

    前言:今天在做一个小项目时,客户要求的xml,跟现在有系统要求的不一样,所以要自己重新写函数支持返回,进行简单总结,希望对大家有所帮助. 首先,使用xml函数需要链上动态库libxml2,需要在电脑上 ...

  3. 【Vue.js】代码优化:在dom中加一行v-if就可少写一个循环类方法

    [问题描述] 把当前用户的购物车中(cartList),商品(good)选中字段checked = true的商品在订单页面中进行展示出来. [一般做法](两次循环) 首先取出当前用户的购物车列表,循 ...

  4. 用tornado实现图片标记

    背景介绍   在文章Keras入门(四)之利用CNN模型轻松破解网站验证码中,其中的验证码图片标记是采用tornado实现的网页实现的.本文将会讲述如何利用tornado来实现图片标记.   我们的示 ...

  5. 分布式系统唯一ID的生成方案讨论

    在分布式系统下唯一id问题,就是id咋生成?比如分表分库,因为要是一个表分成多个表之后,每个表的id都是从1开始累加自增长,那是不对的.举个例子,一个表拆分为了2张表,每个表的id都从1开始累加,这个 ...

  6. Servlet练习:实现增删改查的综合练习

    ---恢复内容开始--- 本文为原创,转载请注明出处:https://www.cnblogs.com/Tom-shushu/p/9383066.html 本篇内容主要介绍:通过Servlet,JSP, ...

  7. MySQL数据连表查询思路

    我们在网站开发中,涉及MySQL数据库查询时,常常需要将两个表或多个表联合起来进行查询数据,这就用到了MySQL中的JOIN函数. JOIN函数有三种,分别是: LEFT JOIN  左连接查询: 查 ...

  8. C#实现多级子目录Zip压缩解压实例

          参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩,类似winrar,可以选择 ...

  9. 一种动态写入apk数据的方法(用于用户关系绑定、添加渠道号等)

    背景: 正在开发的APP需要记录业务员与客户的绑定关系.具体应用场景如下: 由流程图可知,并没有用户填写业务人员信息这一步,因此在用户下载的APP中就已经携带了业务人员的信息. 由于业务人员众多,不可 ...

  10. java压缩指定目录下的所有文件和文件夹的代码

    将代码过程较好的代码段备份一下,下边资料是关于java压缩指定目录下的所有文件和文件夹的代码,希望对码农有帮助. String sourceDir="E:\test";int pa ...