初识Haskell 四:函数function之二 常见函数
对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之二 常见函数的更多相关文章
- JavaScript学习总结(四)function函数部分
		
转自:http://segmentfault.com/a/1190000000660786 概念 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. js 支持两种函数:一类是语言内部的函数 ...
 - JavaScript入门-函数function(二)
		
JavaScript入门-函数function(二) 递归函数 什么是递归函数? 递归简单理解就是,在函数体里,调用自己. //我们在求一个10的阶乘的时候,可能会这么做 //写一个循环 var to ...
 - Javascript学习之函数(function)
		
在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...
 - 一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(四) --高级设置二
		
原文:一个完整的Installshield安装程序实例-艾泽拉斯之海洋女神出品(四) --高级设置二 上一篇:一个完整的安装程序实例—艾泽拉斯之海洋女神出品(三) --高级设置一4. 根据用户选择的组 ...
 - C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)
		
上一讲<C++11 并发指南四(<future> 详解一 std::promise 介绍)>主要介绍了 <future> 头文件中的 std::promise 类, ...
 - 孤荷凌寒自学python第十七天初识Python的函数
		
孤荷凌寒自学python第十七天初识Python的函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 函数是能够完成指定运算并返回运算结果的代码块.是结构化编程重要的结构. 我首先发现pyt ...
 - 分分钟钟学会Python - 函数(function)
		
函数(function) 1 基本结构 本质:将多行代码拿到别处并起个名字,以后通过名字就可以找到这行代码并执行 应用场景: 代码重复执行 代码量很多超过一屏,可以选择通过函数进行代码的分割 写代码方 ...
 - 函数 FUNCTION
		
函数 FUNCTION 定义: 带名字的代码块,用于执行具体任务. 注意: 应给函数指定描述性名称,只是用小写字母和下划线. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何 ...
 - 深入理解javascript中的立即执行函数(function(){…})()
		
投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-06-12 我要评论 这篇文章主要介绍了深入理解javascript中的立即执行函数,立即执行函数也叫立即调用函数,通常它的写法是 ...
 
随机推荐
- Leetcode 题解
			
Leetcode Solutions Language: javascript c mysql Last updated: 2019-01-04 https://github.com/nusr/lee ...
 - springcloud之自定义简易消费服务组件
			
本次和大家分享的是怎么来消费服务,上篇文章讲了使用Feign来消费,本篇来使用rest+ribbon消费服务,并且通过轮询方式来自定义了个简易消费组件,本文分享的宗旨是:自定义消费服务的思路:思路如果 ...
 - 微信小程序初体验,入门练手项目--通讯录,部署上线(二)
			
接上一篇<微信小程序初体验,入门练手项目--通讯录,后台是阿里云服务器>:https://www.cnblogs.com/chengxs/p/9898670.html 开发微信小程序最尴尬 ...
 - 没错,老板让我写个 BUG!
			
前言 标题没有看错,真的是让我写个 bug! 刚接到这个需求时我内心没有丝毫波澜,甚至还有点激动.这可是我特长啊:终于可以光明正大的写 bug 了
 - 一次composer错误使用引发的思考
			
一次composer错误使用引发的思考 这个思考源自于一个事故.让我对版本依赖重新思考了一下. 事故现象 一个线上的管理后台,一个使用laravel搭建的管理后台,之前在线上跑的好好的,今天comop ...
 - 【Android Studio安装部署系列】四十、Android Studio安装Statistic插件(统计项目总行数)
			
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio 是没有提提供统计代码全部行数的功能的,但是对于开发者来说,这个功能确实必备的,Statistic统计代 ...
 - 总结C语言字符检测函数:isalnum、isalpha...
			
前言:最近一直在刷leetcode的题,用到isalnum函数,用man手册查找了一下,总共有13个相关函数如下: #include <ctype.h> int isalnum(int c ...
 - Docker进阶之八:搭建LNMP网站平台实战
			
搭建LNMP网站平台实战 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写.L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可 ...
 - 第三节:dingo/API 最新版 V2.0 之 Creating API Endpoints (连载)
			
对于这篇文章的标题,其实,直译就是创建api端点.但是,真的很难懂,我还是写为API路由吧.每篇,文章,我都会全部去进行实践操作,力求写一个好点的教程. 本文英文地址——>https://git ...
 - javascript小记四则:用JS写一个滚动横条文字,可以根据需要进行修改;
			
网页上的一些广告文字,一直会滚动是怎么做到的,今天给大家演示下,非常简单,源码如下(本案例是在.net平台上,但HTML是通用的): <!DOCTYPE html> <html> ...