在我正在参加的计算机科学课程中,作为家庭作业,我们的任务是处理几个与消息传递有关的不同问题。除了一个,我已经能够解决所有问题,它要求以下内容:
编写一个 mailman 对象工厂
(make-mailman)
,它不接受任何参数并返回一个响应以下消息的消息传递对象:
'add-to-route
: 返回一个接收任意数量邮箱对象并将它们添加到 mailman 对象的“路由”的过程</li>'collect-letters
:返回一个过程,该过程接受任意数量的字母对象并收集它们以供将来分发'distribute
:将每个收集到的信件添加到邮递员路线上地址与信件目的地匹配的邮箱中,并返回目的地与路线上任何邮箱不匹配的任何信件的列表(注意:每次通过'distribute
邮递员对象后,应该没有收集的信件。)
为使代码更容易而给出的一些注释包括:
如果在一个分发轮中将多封信分发到同一个邮箱,则其中任何一封都可能是其消息通过传递
'get-latest-message
到邮箱返回的“最新”信件。没有两个邮箱将具有相同的地址。
任何邮箱或信件都不会多次传递给邮递员。
分发返回的坏信不需要按特定顺序排列。
使用
. 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))
在这里可以给我的任何帮助都将不胜感激,因为我已经尝试查看这个问题一段时间了,但无法从这里弄清楚该怎么做。