当前位置:  开发笔记 > 编程语言 > 正文

功能编程中的所有纯函数都是连续的吗?

如何解决《功能编程中的所有纯函数都是连续的吗?》经验,为你挑选了1个好方法。

我知道Haskell函数集只是所有数学函数的一个子集,因为它是一种编程语言,所以它的所有函数都必须是可计算的.但从数学的角度来看,所有Haskell函数(以及一般的纯函数)是否连续都是正确的?



1> Reid Barton..:

可编辑函数在Scott连续性意义上是连续的,在您链接到的Wikipedia页面的第二段中提到.

连续的函数的一个例子是(伪Haskell)

isInfinite :: [a] -> Bool
isInfinite xs
    | {- xs is an infinite list x0 : x1 : x2 : ... -}        = True
    | {- xs is a finite list x0 : x1 : x2 : ... : xn : [] -} = False
    | {- xs is a list with diverging spine
                            x0 : x1 : x2 : ... : xn : _|_ -} = _|_

它不能连续,因为

() : () : () : ...

是序列的最高要求

_|_
() : _|_
() : () : _|_
...

True = isInfinite (() : () : () : ...)

不是序列的最高要求

_|_ = isInfinite (_|_)
_|_ = isInfinite (() : _|_)
_|_ = isInfinite (() : () : _|_)
...

可计算函数是连续的,主要是因为在有限的时间内函数只能检查有限量的输入.因此,如果可计算函数返回True特定输入,则它必须返回True输入集中的每个输入,这些输入与某些有限观察集合上的原始输入一致.收敛到原始输入的任何递增序列最终将落在该集合内,因此该递增序列上的函数值序列将收敛True.

连续函数不一定是可计算的.例如,任何保持顺序(即f _|_ = _|_,或者f是常数)的函数Integer -> Bool是连续的,因为Integer是平坦域.但当然,其中很多只是可计算的.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有