rendered paste body(load "interaction-utils.scm")
(load "object-system.scm")
(load "make-agent.scm")
(define (make-place name desc)
(let ((list-of-agents null))
(define (self msg)
(cond
((eq? msg 'description) (lambda (self) desc))
((eq? msg 'name) (lambda (self) name))
((eq? msg 'add-agent!)
(lambda (self agent)
(cond ((not (assq (ask agent 'name) list-of-agents)) (set! list-of-agents (cons (cons (ask agent 'name) agent) list-of-agents)))
(else (display "Error: agent is already in the room")))))
((eq? msg 'get-agent) (lambda (self agent) assq (ask agent 'name) list-of-agents))
((eq? msg 'delete-agent)
(lambda (self agent)
(cond ((assq (ask agent 'name) list-of-agents) (retire-agent self agent list-of-agents '()))
(else (display "Error agent not in room")))))
((eq? msg 'agents) (lambda (self) list-of-agents))))
(define (retire-agent self agent list-of-agents new-list-of-agents)
(cond ((null? list-of-agents) (set! list-of-agents new-list-of-agents) new-list-of-agents)
((eq? (car (car list-of-agents)) (ask agent 'name)) (retire-agent self agent (cdr list-of-agents) new-list-of-agents))
(else (retire-agent self agent (cdr list-of-agents) (cons (car list-of-agents) new-list-of-agents)))))
self))