MIT Scheme Message Passing Abstraction

前端 未结 2 475
不知归路
不知归路 2021-01-23 23:07

In a Computer Science course I am taking, for homework, we were tasked with several different questions all pertaining to message passing. I have been able to solve all but one,

2条回答
  •  独厮守ぢ
    2021-01-24 00:10

    Other than the specifics of the message functionality, it looks like you've nailed it. There are however some errors:

    This (route-adder . mobjects) should be (router-adder objects) and similarly for (letter-collector . lobjects).

    The use of begin is unneeded. The body of a (define (func . args) ...) is implicitly enclosed in a begin.

    Idiomatically your code could be written as:

    (define (make-mailman)
      (let ((T '()))
        ;; ...
        (lambda (z)
          (case z
            ((add-to-route)    add-to-route)
            ((collect-letters) collect-letters)
            ((distribute)      distribute)
            (else (error "Invalid option"))))))
    

    [but you may not know about case nor lambda yet...]

    As for solving the actual messaging functionality. You are going to need to maintain a set of mailboxes where each mailbox is going to hold a set of letters. A letter will presumably consist of an address and some content (extra credit for a return-address). The distribute behavior will check the address on each letter and deposit it in its mailbox. The mailman will need to hold letters (while on his route collecting-letters) until instructed to distribute.

    For this you might start by building up the lower-levels of the functionality and then using the lower-levels to build up the actual message passing functionality. Starting like, for example:

    (define (make-letter addr content)
      `(LETTER ,addr ,content))
    (define letter-addr cadr)
    ;; ...
    
    (define (make-mailbox addr)
      '(MBOX ,addr))
    (define mailbox-letters cddr)
    (define (mailbox-letters-add mailbox letter)
      (set-cdr! (cdr mailbox) (cons letter (mailbox-letters mailbox))))
    
    ;;...
    

提交回复
热议问题