gpt4 book ai didi

function - (SICP) 函数和过程有什么区别?

转载 作者:行者123 更新时间:2023-12-04 13:12:22 26 4
gpt4 key购买 nike

我目前正在通过计算机程序的结构和解释来完成本书和 Brian Harvey(他有时很搞笑)的讲座,但是我还没有真正拥有我的“啊哈!时刻”区分函数和程序。

现在,我在讲座和阅读之外进行了研究,发现了一些关于同一问题的不同帖子,但所有帖子似乎都分支到关于真实解释或过时定义的单独讨论/意见。我看到的一个一般性答案是函数返回一个值而过程不返回值,但是这对我来说并没有太多解释,而且大多数用户对该回答似乎有一些反对该答案的论点。

深入了解文本和讲座中的高阶过程我完全理解这个概念和它提供的功能,但是我很困惑,因为我会听到“高阶过程”和“高阶函数”。 Brian Harvey 还提到“高阶过程代表高阶函数”。

我理解下面两个函数是同一个函数,只是不同的过程。

f(x) = 2x + 6
g(x) = 2(x + 3)

在下文中,make-adder 被称为以 num 作为形式参数的过程。 make-adder的域是数字,范围是程序。我想真正让我难过的是他指的是 lambda 表达式,一个 lambda 表达式,但是 make-adder 正在返回一个过程?

(define (make-adder num)
(lambda (x) (+ x num))

(define plus3 (make-adder 3))
(plus3 8)

我以为我有一个清晰的理解,直到在高阶程序类(class)中提到了一些程序,此后一切都变得模糊了。

用一个可能的例子有助于区分两者吗?谢谢!

最佳答案

TL; DR: 过程和函数在 SICP 上下文中的含义相同。

在数学中,函数是你应用参数并返回一个值的东西,并且总是将相同的值返回给相同的参数。您可以将其替换为结果参数之间的映射。

在 Scheme 或 JavaScript 等编程语言中,对于所有具有某种副作用或返回与参数不一致的代码,函数一词的使用并不正确。

过程是一个更通用的术语,因此您不能说过程需要具有引用透明性才能将其视为数学函数,因此 Scheme 和 JavaScript 都具有过程而不是函数。例如。 x86 intel 平台中的子例程是一个过程。它不允许有参数也没有返回值,只是跳转和返回。然而,C 使用代码来操纵堆栈,以便能够传递参数并获得返回值,从这个意义上说,你可以模拟“一个函数”,但它们并没有消除每个输入的返回值不同的可能性,因此您可以实现不是函数的“c 函数”,但可以将其称为过程。

关于function - (SICP) 函数和过程有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63756222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com