维基百科有这样的说法:

  

全功能编程(也是   被称为强大功能   编程,与之形成鲜明对比   普通的,或弱的功能   编程)是一种编程范式   这限制了程序的范围   那些可证明的   终止。

  

这些限制意味着总数   功能编程不是   图灵完备。但是,这套   可以使用的算法仍然是   巨大。例如,任何算法   有一个渐近上界   为它计算可以是微不足道的   变成了一个   通过使用可证明终止功能   上限作为额外参数   每个都递减   迭代或递归。

还有一篇关于全面功能编程的论文的Lambda The Ultimate Post。

直到上周,我还没有在邮件列表上看到过。

您知道更多资源,参考或任何示例实现吗?

有帮助吗?

解决方案

如果我理解正确的话,全功能编程就意味着:用全部函数编程。如果我正确记住我的数学课程,则总功能是在其整个域上定义的功能,部分功能是具有“孔”的功能。在其定义中。

现在,如果你有一个函数,对于某些输入值 v 进入无限递归或无限循环或者通常不以其他方式终止,那么你的函数不是为 v 定义,因而是部分的,即不是全部的。

Total Functional Programming不允许您编写这样的函数。所有功能始终返回所有可能输入的结果;并且类型检查器确保这种情况。

我的猜测是,这大大简化了错误处理:没有。

你的引言中已经提到了缺点:它不是图灵完整的。例如。操作系统本质上是一个巨大的无限循环。实际上,我们不希望操作系统终止,我们将此行为称为“崩溃”。对我们的电脑大吼大叫!

其他提示

虽然这是一个老问题,但我认为到目前为止,没有一个答案能提到全部函数式编程的真正动机,这就是:

如果程序是证明,而证明是程序,那么具有“漏洞”的程序就没有任何意义作为证据,并引入逻辑上的不一致。

基本上,如果证明是程序,则可以使用无限循环来证明任何。这真的很糟糕,并提供了我们为什么要完全编程的动机。其他答案往往不考虑论文的另一面。虽然语言 techincally 没有完整,但您可以通过使用共感应定义和函数来恢复许多有趣的程序。我们很容易想到归纳数据,但 codata 在这些语言中起着重要的作用,在这些语言中你可以完全定义一个无限的定义(当做真实的时候)如果您正在编写操作系统,那么终止的计算,您可能只会使用其中的一部分,或者可能不会。)

值得注意的是,大多数证据助理都是基于这个原则工作的,例如Coq。

慈善是另一种保证终止的语言:
http://pll.cpsc.ucalgary.ca/charity1/www/home.html

休谟是一种4级语言。外层是图灵完成,最内层保证终止:
   http://www-fp.cs.st-andrews.ac。英国/休谟/报告/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top