我正在尝试模仿方案中的堆栈。我使用的是DrScheme,并选择了R5RS语言。我需要创建弹出、推送和窥视的函数。但是我很难弄清楚如何通过引用来传递。我读过一些关于not的信息,但R5RS不支持它们。有没有其他方法可以通过引用传递?
发布于 2010-12-05 05:11:24
Scheme鼓励您以函数式的方式思考,而不是像在命令式语言中那样“通过引用”进行传递。例如,这意味着您的push操作需要两个参数:
并返回一个新堆栈,该堆栈包含与现有堆栈的其余部分组合的新元素。类似地,pop操作将获取一个堆栈,并返回一个没有顶部元素的堆栈,而peek将返回顶部元素的值。
事实证明,Scheme中的列表与堆栈的工作方式几乎完全相同。以下映射将帮助您入门:
发布于 2010-12-30 08:44:12
简而言之:不要使用r5rs;只使用本地语言。在当前版本的DrRacket中,这种语言被称为“球拍”。这是一个使用盒子的程序:
#lang racket
(define b (box 234))
(set-box! b 333)
(unbox b)Greg的答案比我的更纯粹的函数式,但如果认为可变结构在DrRacket (nee DrScheme)中不可用,那就大错特错了。
最后,您误用了术语“通过引用调用”。盒子只是一种可变结构和一种按值调用的语言(如球拍、r5rs、java等)。可以很好地改变这些结构。
https://stackoverflow.com/questions/4355827
复制相似问题