【问题标题】:What is the difference between a subroutine and a function? [duplicate]子程序和函数有什么区别? [复制]
【发布时间】:2012-05-10 10:20:12
【问题描述】:

可能重复:
What is the difference between a ‘function’ and a ‘procedure’?

我在网上搜索了这个问题的答案,得到的答案是函数可以返回值、修改值等,而子程序不能。但我对这种解释并不满意,在我看来,差异应该不仅仅是术语问题。

所以我正在为这个问题寻找一个更具概念性的答案。

【问题讨论】:

标签: function terminology theory subroutine


【解决方案1】:

函数反映了函数的数学定义,即从 1 个或多个输入到值的映射。1

子例程是具有明确入口点和出口点的任何代码块的通用术语。

但是,这些术语的确切含义会因上下文而异。


1。显然,这不是函数的正式数学定义。

【讨论】:

  • 哇!现在这就是我要找的!谢谢!
  • 一个 true 函数没有副作用。
【解决方案2】:

编程语言中函数的一般定义是接受零个或多个输入值并返回零个或一个输出值的一段代码

子程序最常见的定义是一个不返回任何东西并且通常不接受任何东西的函数。只是一段有名字的代码。

实际上,在大多数语言中,函数的声明方式并没有什么不同。所以子程序可以称为函数,但函数不一定可以称为子程序。

还有人认为函数和子程序是同一个东西,但名称不同。

Subroutine - Wikipedia

【讨论】:

    【解决方案3】:

    作为@Oli 回答的附录,值得注意的是,在数学意义上,函数必须是“定义明确的”,也就是说,它的输出唯一由它的输入决定,而这在编程语言中通常不是这样。

    那些保证的人(以及他们的功能不会引起副作用)被称为pure functional languages,其中一个例子是Haskell。它们的优点(除其他外)是它们的函数在其行为中可证明是正确的,如果函数依赖于外部状态和/或具有副作用,这通常是不可能的。

    【讨论】:

      【解决方案4】:

      函数必须返回一些值,并且不能更改全局变量或在函数体之外声明的变量。在这种情况下,函数只能模仿它的数学对应部分(将一个数学对象映射到另一个数学对象的东西)

      子程序不返回任何东西,而且通常是不纯的,因为它必须改变一些全局状态或变量,否则调用它是没有意义的。子程序没有数学上的平行关系。

      【讨论】:

        猜你喜欢
        • 2011-08-28
        • 1970-01-01
        • 2011-06-16
        • 1970-01-01
        • 2019-01-17
        • 1970-01-01
        • 2015-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多