Implemente um sistema de objetos para Scheme, de acordo com a descrição a seguir, mais um dos opcionais na próxima seção.
Classe são criadas com define-class. Os argumentos são o nome da classe, o nome da superclasse e os atributos (ou slots).
(define-class server host tcp-ports host-name)
Classes são instanciadas com make-NOME.
(define h (make-host '(22 80) "meu-host"))
Atributos são referenciados por NOME-ATRIB-ref e NOME-ATRIB-set!
(host-tcp-ports-ref h) ==> '(22 80) (host-host-name-set! h "kruger")A segunda linha muda o atributo host-name de h.
Deve ser possível inserir novos atributos em uma classe, sem precisar criar uma superclasse, usando add-ports.
(add-slot server udp-ports '()) (add-slot server location "Santo André")
Todas as instâncias de host passarão imediatamente a ter estes dois slots, com estes valores.
(I) Deve haver também um remove-slot que remove atributos de uma classe, e um list-slots que lista os atributos de alguma classe.
Deve haver um procedimento class que, dado um objeto, retorna o nome de sua classe (como símbolo).
(II) Implemente herança múltipla: ao invés de uma superclasse, define-class deve aceitar uma lista de superclasses.