gpt4 book ai didi

function - "call-by-value"的不同含义有关联吗?

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

目前我正在上一门关于编程语言概念的类(class),这是我遇到一个曾经让我困惑的问题(当我观看 Martin Odersky's functional programming course on Coursera 的视频时):

术语“按值调用”经常在两种不同的上下文中使用:

上下文 1:评估机制(按值调用与按名称调用)

如果一个函数被传递一个表达式作为参数,在函数体中的参数标识符被它替换之前,该表达式是否被简化为一个值(即求值)?如果是,则称为按值调用,如果不是,则称为按名称调用。至少我是这么理解的。

上下文 2:参数传递(按值调用与按引用调用)

如果将标识符作为参数传递给函数,函数体是否正在使用指向给定标识符所指向内容的副本的新名称绑定(bind)进行评估,或者函数是否可以实际更改标识符的内容指向,即对调用上下文“可见”的更改?同样,第一个变体是按值调用,而第二个变体是按引用调用。 当然如果我做对了。

然而,尽管我没有看到术语“按值调用”的两个用例之间的关系,但偶然在这两种情况下使用该术语似乎太巧合了。

有人知道为什么选择同一个术语来描述两个(看似不同的)事物吗?

最佳答案

您的分析是正确的,我也发现“按值调用”这个短语的重载令人困惑。

采用 relevant Wikipedia article 中的语言, call-by-value 和 call-by-reference 可以认为是“严格求值”的两种变体,而 call-by-name 是一种“非严格求值”。

为了回答你的问题,我猜想草率地使用短语“按值调用”来指代“严格评估”一般是由于按值调用是类型一些最流行的命令式编程语言实现的严格评估。一些old lecture notes from a PL course at UMD将您描述的两种情况混为一谈。他们将保护参数不被修改称为 C、C++ 和 Java 中按值调用的“另一个功能”(幻灯片 21),其中暗示严格评估(错误地恕我直言)是按调用的最终功能-值(value)。

关于function - "call-by-value"的不同含义有关联吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32296990/

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