按值传递和按名称传递的输出

时间:2016-11-13 15:19:58

标签: parameters parameter-passing generic-programming pass-by-value pass-by-name

当x和y按值传递时以及按名称传递时,我需要找到以下代码的结果。

CL-USER 48 > (sdraw '(("foo" . ("alice" "bob")) ("bar" . nil)))

[*|*]---------------------------->[*|*]--->NIL
 |                                 |
 v                                 v
[*|*]--->[*|*]---->[*|*]--->NIL   [*|*]--->NIL
 |        |         |              |
 v        v         v              v
"foo"    "alice"   "bob"          "bar"

如果x和y通过值,我得出的结论如下: 产出:13,11,11,3 第二输出:1,3,3,11。 如果这是错的,请帮助我理解原因。

我也不确定在我看到的例子中,这个代码中的pass-by-name是如何工作的。请帮忙。

假设静态范围。

1 个答案:

答案 0 :(得分:0)

在描述过程中,我会忽略您的代码很可能无法编译/运行的事实,并且只会解决您的具体问题。

无论用于传递参数的机制(按值或按名称),变量i的赋值都没有意义:当按值传递时,根本没有任何意义(在函数{{中) 1}})源参数可能是数组;当按名称传递并且P1传递到A[i]时,到达函数体i=1的是P1,因此对A[1]的更改将不会影响所有

因此,在两种情况下(按值和按名称),您将获得相同的结果,这意味着:第一次调用时为7,7,7,2,第二次调用时为1,1,1,2。