参数传递方案

nam*_*ked 3 scheme parameter-passing

任何人都可以帮我理解Scheme中的各种参数传递模式吗?我知道Scheme实现了值的参数传递.但其他模式怎么样?

Scheme中的参数传递是否有任何好的文档?

Eli*_*lay 7

Scheme 只有 call-by-value函数调用.还有其他可以在语言中实现的替代方案,但如果你是初学者,那么最好在这一点上不尝试它们.如果你正在寻找一种通过"引用"传递值的方法 - 那么可以使用的一种选择就是使用宏,但你真的不应该去那里.相反,像PLT Scheme这样的一些Scheme实现提供了"盒子值":这是一种像这样使用的容器:

  • 您创建一个盒子拿着<something>(box <something>)
  • 您将获得存储在框中的值 (unbox <some-box>)
  • 您可以更改存储在框中的值 (set-box! <some-box> <new-value>)

鉴于这两个,你可以"按值"使用这样的盒子对象,但它们的内容实际上是一个引用.这非常类似于C,其中所有值(实际上大多数)都按值传递,但这些值中的一些可以是您可以变异的指针.顺便说一句,最好避免这些:在Scheme中,函数式编程是更常见的选择,因此最好从此开始.

(一旦你对Scheme更加流利,如果你正在使用具有足够抽象的Scheme,那么你也可以学习如何模仿许多替代方案.)