加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在类型系统的背景下,什么是“善良”?

发布时间:2020-12-16 18:39:34 所属栏目:安全 来源:网络整理
导读:我已经阅读了维基百科的文章并搜索了明显的地方,但我被卡住了.有人可以简单地告诉我究竟是什么类型的?它是干什么用的 ? Scala示例非常受欢迎 解决方法 简而言之:一种类型是类型的类型. 什么是价值? 1,2,3是值.那么“你好”和“世界”,真假,等等. 值属于
我已经阅读了维基百科的文章并搜索了明显的地方,但我被卡住了.有人可以简单地告诉我究竟是什么类型的?它是干什么用的 ?

Scala示例非常受欢迎

解决方法

简而言之:一种类型是类型的类型.

什么是价值? 1,2,3是值.那么“你好”和“世界”,真假,等等.

值属于类型.类型描述一组值. 1,2和3属于类型Nat,“Hello”和“World”属于Text类型,true和false属于Boolean类型.

函数将一个或多个值作为参数,并生成一个或多个值作为结果.为了有意义地对参数做一些事情,函数需要对它们做一些假设,这是通过约束它们的类型来完成的.因此,函数参数和返回值通常也有类型.

现在,函数也有一个类型,由其输入和输出的类型描述.例如,计算数字绝对值的abs函数具有类型

Number -> NonNegativeNumber

添加两个数字的函数add具有类型

(Number,Number) -> Number

函数divmod具有类型

(Number,Number) -> (Number,Number)

好的,但是如果函数将值作为参数并将值作为结果生成,并且函数是值,那么函数也可以将函数作为参数并将函数作为结果返回,对吧?这种功能的类型是什么?

假设我们有一个函数findCrossing,它找到了一些其他函数(数字)穿过y轴的点.它将函数作为参数并作为结果产生一个数字:

(Number -> Number) -> Number

或者是一个函数makeAdder,它生成一个函数,它接受一个数字并为其添加一个特定的数字:

Number -> (Number -> Number)

并且计算另一个函数的导数的函数:

(Number -> Number) -> (Number -> Number)

让我们看一下这里的抽象层次:价值是非常具体的.这只意味着一件事.如果我们在这里订购我们的抽象级别,我们可以说一个值的顺序为0.

一个函数,OTOH更抽象:单个函数可以产生许多不同的值.所以,它有订单1.

返回或接受函数的函数更加抽象:它可以产生许多不同的函数,这些函数可以产生许多不同的值.它有订单2.

一般来说,我们通过订单调用所有内容> 1“更高阶”.

好的,但那种呢?好吧,我们在上面说过1,“Hello”,false等都有类型.但是数字的类型是什么?还是文字?还是布尔?

嗯,它的类型是Type,当然!这种“类型的类型”被称为一种.

就像我们可以拥有从值构造值的函数一样,我们可以使用从类型构造类型的函数.这些函数称为类型构造函数.

就像函数有类型一样,类型构造函数也有类型.例如,List类型构造函数采用元素类型并为该元素生成列表类型

Type -> Type

Map类型构造函数采用键类型和值类型并生成地图类型

(Type,Type) -> Type

现在,继续类比,如果我们可以使用函数作为参数,我们还可以使用类型构造函数将类型构造函数作为参数吗?当然!

一个例子是Functor类型构造函数.它需要一个类型构造函数并生成一个类型:

(Type -> Type) -> Type

注意我们总是在这里写Type?上面,我们有许多不同的类型,如数字,文本,布尔等.在这里,我们总是只有类型,即类型.这对于(警告,前面的不良双关语)类型来说很繁琐,所以不要在任何地方写Type,我们只写*.即Functor有那种

(* -> *) -> *

和数字有那种

*

继续类比,数字,文本和所有其他类型*有订单0,列表和所有其他类型* – > *或更一般地(*,…) – > (*,…)有订单1,Functor和所有种类(* – > *) – > *或* – > (* – > *)(等等)有订单2.除了在这种情况下,我们有时也称它为秩而不是订单.

超过顺序/等级1的所有内容称为高阶,高阶或更高阶.

我希望这个比喻现在很明确:类型描述了价值观;种类描述了各种类型.

旁白:我完全忽略了currying.基本上,currying意味着你可以将任何带有两个值的函数转换为一个函数,该函数接受一个值并返回一个取另一个值的函数,类似于三个,四个,五个……参数.这意味着您只需要使用一个参数来处理函数,这使得语言更加简单.

但是,这也意味着从技术上讲,add是一个高阶函数(因为它返回一个函数),这使得定义变得混乱.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读