可能重复:
What is the difference between a ‘function’ and a ‘procedure’?
我在网上搜索了这个问题的答案,我得到的答案是函数可以返回值,修改值等,但子程序不能。但我对这种解释并不满意,在我看来,差异不仅仅是术语问题。
所以我正在寻找一个更概念性的答案。
答案 0 :(得分:24)
函数反映函数的数学定义,它是从1个或多个输入到值的映射。 1
子程序是具有明确入口点和出口点的任何代码块的通用术语。
但是,这些术语的确切含义因环境而异。
<小时/> <子> 1。显然,这不是函数的正式数学定义。
答案 1 :(得分:5)
编程语言中函数的通用定义是一段代码,它接受零个或多个输入值并返回零或一个输出值。
子程序最常见的定义是一个不返回任何内容且通常不接受任何内容的函数。它只是一段带有名字的代码。
实际上,在大多数语言中,函数的声明方式没有区别。因此子程序可以称为函数,但函数不一定可以称为子程序。
还有人认为函数和子程序具有不同的名称。
答案 2 :(得分:4)
值得注意的是,作为@Oli答案的附录,在数学意义上,函数必须“明确定义”,也就是说其输出唯一由其输入决定,而这在编程语言中通常不是这种情况。
那些做使得这种保证(以及它们的功能不会引起副作用)被称为pure functional languages,其中一个例子是Haskell。他们的功能(以及其他)的优势在于其行为可证明是正确的,如果功能依赖于外部状态和/或具有副作用,这通常是不可能的。
答案 3 :(得分:0)
函数必须返回一些值,并且不得更改全局变量或在函数体外声明的变量。在这种情况下,函数只能模仿它的数学计数器部分(将数学对象映射到另一个数学对象的东西)
子程序不会返回任何内容,并且通常是不纯的,因为它必须更改某些全局状态或变量,否则调用它是没有意义的。子程序没有数学并行。