神奇的Haskell

2024-08-22 10:08
文章标签 神奇 haskell

本文主要是介绍神奇的Haskell,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Haskell 定义函数的时候可以指定一个类型,也可以只指定某一类类型(泛型编程)

定义普通函数

plus2 :: Int -> Int

plus2>

只能用Int型调用

定义泛型的函数

plus2 :: (Num a) a -> a

plus2>

这下子不只是Int型可以调用,还有float之类的只要是数字就都可以调用了

Haskell 函数调用过程,神的一B

在实际上,Haskell没有超过一个参数的函数。对于一个两个参数的函数,他是这样的:原函数A与第一个参数组合 返回一个可以调用一个参数的函数B,B 再调用第二个参数,依次做下去。

这样的好处在于,可以利用原来的函数方便的创造新函数

比如我有一个 “+”函数 我要定义一个 “+3” 函数 (只包含一个参数),就直接 (+3) 就定义好了。这个函数只包含一个参数,可以被其他函数传来传去。

另外还有一个小地方就是 定义函数类型的时候 "->"这个东西是右结合的,就是先算最右边的,所以定义函数的时候要加上括号


flip' :: (a -> b -> c) -> b -> a -> c   
flip'>


这个小函数作用是传入一个两个参数的函数,返回一个翻转这两个参数的函数。真是吓尿了。


haskell中的循环和递归

haskell中是没有循环的,一切都是用递归来实现,一开始的时候不习惯,总觉得循环是必须的,但是现在觉的haskell实在是太厉害了。

一切循环都可以通过递归来实现

haskell提供了几个函数,今天又学了一个fold函数,这个函数可以说是循环语句的杀手了。

fold的作用就是遍历一个list,对其中的元素一个一个的操作。

fold 的参数是一个两个参数的函数, 一个起始值 一个list。那个函数操作的两个变量,一个是list顶端的数,一个是累加数。这个函数经过计算后把这个累加值传递下去最后返回这个累加值。

想想那些个for语句不就是做的这件事么?


Haskell 的类型构造子与值构造子

Haskell 可以方便的使用data关键字构造新类型,新类型可以是由旧类型组合而成也可以构造泛型的类型

就是可以容纳多个类型,构造泛型的时候不准使用类型限制

data List>

这个List 有两个构造子,可以递归的构造List Empty 和 Cons 是List的两个不同构造子的名字 这个类型名字是List,需要传入一个类型才能使用


Haskell 中的Functor 与>

接受一个缺少一个参数的函数再返回缺少一个参数的函数,是不是特别帅。

这样来看,如果你在使用fmap的时候,最后不加参数,那么他就返回一个缺少一个参数的函数,这个函数可以按照你要的规则构造一个原类型的新值,你可以命名一下以后随便用啊哈哈。

不过这里这个f容易引起误会,按函数定义来,fmap中的f是个函数(a->b) ,Functor定义中的f 是个构造子OTZ。

这就叫函数升华?(function>

然后把这个AjNode 传入 一个链表中,就是一个点的邻接点了,设这个类型为V

然后再把V传入一个链表中,这个类型就是G,也就是图了

几个链表而已...


这篇关于神奇的Haskell的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095971

相关文章

Kafka拦截器的神奇操作方法

《Kafka拦截器的神奇操作方法》Kafka拦截器是一种强大的机制,用于在消息发送和接收过程中插入自定义逻辑,它们可以用于消息定制、日志记录、监控、业务逻辑集成、性能统计和异常处理等,本文介绍Kafk... 目录前言拦截器的基本概念Kafka 拦截器的定义和基本原理:拦截器是 Kafka 消息传递的不可或缺

Redis 管道的神奇力量

今天我们要来探索一个 Redis 中非常强大且实用的特性——管道(Pipeline)。如果你想让你的 Redis 操作更加高效,那么这篇文章绝对值得一读。 一、Redis 管道是什么 Redis 管道是一种在客户端和服务器之间批量执行命令的技术。它允许客户端将多个命令一次性发送到服务器,而不是逐个发送并等待每个命令的响应。服务器会按照顺序执行这些命令,并将所有命令的响应一次性返回给客户端。

入门篇:神奇的Annotation

涅槃1992 关注 2016.12.25 23:41* 字数 4964 阅读 1059评论 3喜欢 29 前面写了Android 开发:由模块化到组件化(一),很多小伙伴来问怎么没有Demo啊?之所以没有立刻放demo的原因在还有许多技术点没说完. 今天我们就来细细评味Java当中Annotation,也就是我们常说的注解. 本文按照以下顺序进行:元数据->元注解->运行时注解->编译时

一个人就能干一个团队剪辑工作?云微客就是这么神奇

你知道拍摄、剪辑一条视频需要花费多长时间吗?半个小时?还是一个小时呢?如果我想一天发布上百条视频,你觉得可能吗?很显然,仅凭个人是很难办到的,那么就需要借助工具,而云微客AI批量剪辑系统正好可以解决这个难题。 在当下这个短视频风靡的时代,不管是企业还是个人创作者们都需要借助各种工具和系统来提升创作内容的生产效率和传播效果。而云微客AI批量剪辑系统凭借着批量剪辑的功能,为创作者带来了很大的

神奇的android广播

最近用了android的广播,个人感觉非常好用: 首先在你要接收的地方注册一个: context.registerReceiver(myReceiver, new IntentFilter("com.shic.action.d")); 然后就是定义注册的这个,在接收到广播后执行的操作: BroadcastReceiver myReceiver = new BroadcastRecei

神奇的babel

2015年,ECMA推出es6,在es5的基础上添加了各种人性化开发的新特性,详见es2015 让人头疼的是当下主流浏览器的JS引擎并不识别es6语法,所以我们需要将es6的语法翻译成es5的形式再提交给js引擎执行。 那有没有好的工具来实现两种标准之间的转换呢,有,babel。 好,既然用到babel,那么第一步肯定要在项目中安装babel。安装的方法可参照点击打开链接 npm i

探索PDF的奥秘:pdfrw库的神奇之旅

文章目录 探索PDF的奥秘:pdfrw库的神奇之旅背景:为何选择pdfrw?pdfrw是什么?如何安装pdfrw?五个简单的库函数使用方法场景应用:pdfrw在实际工作中的应用常见问题与解决方案总结 探索PDF的奥秘:pdfrw库的神奇之旅 背景:为何选择pdfrw? 在数据处理的世界中,PDF文件因其格式的稳定性和广泛兼容性而备受青睐。然而,处理PDF文件往往需要专

【Linux】Linux命令行大冒险:寻找、搜索与压缩的神奇之旅

欢迎来到 CILMY23 的博客 🏆本篇主题为:Linux命令行大冒险:寻找、搜索与压缩的神奇之旅 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C++ | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题 | 代码训练营 🏆感谢观看,支持的可以给个一键三连,点赞收藏+评论。如果你觉得有帮助,还可以点点关注 前言: 我们也

探索Python数据持久化的秘密:ZODB库的神奇之旅

文章目录 探索Python数据持久化的秘密:ZODB库的神奇之旅背景ZODB是什么?如何安装ZODB?简单库函数使用方法场景应用常见Bug及解决方案总结 探索Python数据持久化的秘密:ZODB库的神奇之旅 背景 在Python的广阔世界中,数据持久化是一个不可或缺的需求。无论是为了保存应用程序的状态,还是为了在多个会话之间共享数据,我们都需要一种可靠的方法来存储和

JS设计模式之“神奇的魔术师” - 简单工厂模式

引言 在JavaScript开发中,我们经常需要创建和管理各种对象,而简单工厂模式就是一种最简单的用来创建对象的设计模式。 简单工厂模式通过一个工厂类来创建相似的对象,而无需直接使用具体类来实例化对象。这样可以将对象的创建过程与使用过程分离,提供了更好的灵活性和可维护性。 在本篇文章中,我将为您讲解以下内容: 什么是简单工厂模式?它的基本思想和原理是什么? 如何在JavaScr