当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是如何工作的。请帮忙。
假设静态范围。
答案 0 :(得分:0)
在描述过程中,我会忽略您的代码很可能无法编译/运行的事实,并且只会解决您的具体问题。
无论用于传递参数的机制(按值或按名称),变量i
的赋值都没有意义:当按值传递时,根本没有任何意义(在函数{{中) 1}})源参数可能是数组;当按名称传递并且P1
传递到A[i]
时,到达函数体i=1
的是P1
,因此对A[1]
的更改将不会影响所有
因此,在两种情况下(按值和按名称),您将获得相同的结果,这意味着:第一次调用时为7,7,7,2,第二次调用时为1,1,1,2。