2010-12-04 65 views
3

我试图在方案中模拟堆栈。我正在使用DrScheme,并选择了R5RS语言。我需要创建弹出,推送和查看功能。但我无法弄清楚如何通过引用传递。我已阅读了一些有关框的信息,但R5RS不支持它们。有没有其他方法可以通过引用传递?方案R5RS:通过引用

回答

0

计划鼓励您从功能意义上思考,而不是通过“通过引用”,这是您可能在命令式语言中做的事情。这意味着你的push操作,例如,将采取两个参数:

  • 堆栈
  • 一个新的元素

包含新的元素,结合新的堆栈现有堆栈的其余部分。同样,pop操作会堆叠并返回一个顶部元素消失,peek将返回顶部元素的值。

事实证明,Scheme中的列表几乎完全像栈一样工作。下面的映射将帮助您开始:

  • 推 - 利弊
  • 流行 - 休息
  • 偷看 - 第一
+0

我需要弹出不仅仅是删除顶部元素并返回列表。弹出功能必须返回顶部元素,同时也从列表中删除它。所以我不能返回列表,因为我必须返回顶部元素。 – Crbreingan 2010-12-04 21:15:20

1

简短的回答:不使用R5RS;只使用母语。在当前版本的DrRacket中,该语言被称为“球拍”。下面是一个使用盒的程序:

#lang racket 

(define b (box 234)) 

(set-box! b 333) 

(unbox b) 

FWIW:格雷格的答案是更纯粹的比我的功能,但它是一个错误的认为,可变结构不DrRacket(NEE DrScheme)可用。

最后终于,你滥用术语“引用通话”。盒子只是可变结构,而按值语言(比如racket,r5rs,java等)可以很好地改变这些结构。