【发布时间】:2013-05-05 01:14:32
【问题描述】:
在我正在参加的计算机科学课程中,作为家庭作业,我们的任务是处理几个与消息传递有关的不同问题。除了一个,我已经能够解决所有问题,它要求以下:
编写一个不带参数的邮递员对象工厂
(make-mailman)返回一个响应以下消息的消息传递对象:
'add-to-route:返回一个接收任意数量邮箱对象的过程 并将它们添加到 mailman 对象的“路由”'collect-letters:返回一个接收任意数量字母对象的过程,并且 收集它们以供将来分发'distribute:将收集到的每封信件添加到邮递员路线上的邮箱中 address 与信件的目的地相匹配,并返回其目的地的任何信件的列表 与路线上的任何邮箱都不匹配(注意:每次经过后'distribute这 mailman 对象应该没有收集到的信件。)
为简化代码而给出的一些说明包括:
如果在一轮分发中将多封信分发到同一个邮箱,则任意一封 其中可能是通过
'get-latest-message返回消息的“最新”信件 到邮箱。没有两个邮箱会有相同的地址。
不会将任何邮箱或信件多次传递给邮递员。
distribute 返回的坏信不需要按特定顺序。
使用
. args语法接受任意数量的参数。
这是我自己能够弄清楚的:
(define (make-mailman)
(let ((T '()))
(define (route-adder . mobjects)
(assoc mobjects T))
(define (letter-collecter . lobjects)
(assoc lobjects T))
(define (add-to-route mobjects)
(begin (set! T (cons (route-adder . mobjects) T)) 'done))
(define (collect-letters lobjects)
(begin (set! T (cons (sort-strings (letter-collecter . lobjects)) T)) 'done))
(define (dispatch z)
(cond ((eq? z 'add-to-route) add-to-route)
((eq? z 'collect-letters) collect-letters)
((eq? z 'distribute) "unsure of what to do here")
(else "Invalid option")))
dispatch))
任何可以在这里给我的帮助都将不胜感激,因为我已经尝试研究这个问题一段时间了,但无法从这里弄清楚该怎么做。
【问题讨论】:
-
标题和这个有什么关系?建议“方案消息传递抽象”
-
感谢您的建议。更改了标题以使其更有意义。
-
像你一样改变你的问题是令人困惑的,因为这里的答案是指你以前的代码。现在无法理解此 Q/A 条目。我已将您的问题恢复到以前的版本,如果您愿意,可以使用新代码提出新问题。
-
哦,好的。谢谢你。我不习惯在这里进行编辑,所以我想我犯了一些错误。
标签: scheme