scala - 术语 "reason about"在计算机科学中意味着什么?

标签 scala haskell functional-programming

在学习函数式编程时,我不断遇到“原因”这个术语,尤其是在纯函数和/或引用透明性的背景下。有人能解释一下这到底是什么意思吗?

最佳答案

通常,在编写程序时,您的工作不仅仅只是编写代码,您还想了解代码所展示的一些属性。您可以通过两种方式获得这些属性:通过逻辑分析或通过经验观察。

此类属性的示例包括:

  • 正确性(程序是否执行其预期的操作)
  • 性能(需要多长时间)
  • 可扩展性(输入如何影响性能)
  • 安全性(算法是否会被恶意滥用)

当您凭经验测量这些属性时,您得到的结果精度有限。因此,从数学上证明这些性质要优越得多,但并不总是那么容易做到。函数式语言的设计目标之一通常是使其属性的数学证明更容易处理。这就是程序推理的典型含义。

<小时/>

就函数或较小的单位而言,上述内容适用,但有时作者也仅仅意味着思考算法或设计算法。这取决于具体的用途。

<小时/>

顺便说一句,一些例子说明了如何推理其中一些事情以及如何进行实证观察:

正确性:如果我们能够用等式证明代码做了它应该做的事情,我们就可以证明代码是正确的。因此,对于排序函数,如果我们可以证明我们给它的任何列表都具有被排序的属性,我们就知道我们的代码是正确的。根据经验,我们可以创建一个单元测试套件,在其中提供输入的代码示例,并检查代码是否具有所需的输出。

性能和可扩展性:我们可以分析我们的代码并证明算法的性能范围,以便我们知道所需的时间如何取决于输入的大小。根据经验,我们可以对代码进行基准测试,看看它在特定机器上实际运行的速度有多快。我们可以执行负载测试,看看我们的机器/算法在折叠/变得不切实际之前可以接受多少实际输入。

关于scala - 术语 "reason about"在计算机科学中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18666821/

相关文章:

Haskell 类型签名和 Monad

haskell - Haskell 内联函数可以作为参数传递吗?

scala - 我对带有可变类的 "referential transparency"的理解是否正确?

scala - 如何通过 sbt compile 抑制警告

haskell - 在 Haskell 中制作小写字符串列表

c++ - 是否有类似于/等同于 Functional Java 的 C++ 库?

java - LambdaJ:为什么我们不能在 select 子句中应用操作?

scala - 找不到类型的隐式 `SchemaMeta`

scala - 是否可以确保按foreach定义按顺序在Scala中迭代主题集合?

java - 我正在寻找一些帮助,以使用 Play 框架将 Polymer 与服务器端 Scala/java 结合使用