PLT-схема ....... Устанавливается как объекты - PullRequest
0 голосов
/ 27 ноября 2009

Хорошо, поэтому я пытаюсь создать программу "make-set", используя объекты. У меня все готово запрограммированы все основные процедуры для наборов, таких как union, intersect и member-of, так что это то, что я пока делаю для моей программы make-set с использованием объекта:

(define make-set
   (lambda ()
    (let ((s '()))
     (lambda (msg e)
       (case msg
        ('add (set! s (cons e s))
        ('member? (member-of e s))
        ('intersect (intersect e s))
        ('superset (superset e s))
        ('subset (subset e s)))))))

Так это работает ... это использование объекта? Если бы не ты мог показать мне, как ... Спасибо

Ответы [ 2 ]

2 голосов
/ 17 декабря 2009

Да, это можно рассматривать как использование объектов. По сути, вы «катите свою собственную» объектную систему, моделируя каждый объект как функцию, которая отвечает на сообщения.

Обратите внимание, однако, на главный недостаток системы, как вы ее написали. Предположим, вы хотите пересечь два набора, оба представленные в виде объектов. Вызов вашего метода «пересечения» не сработает. Вы понимаете, почему?

В более общем смысле, схема PLT (и многие другие языки) предоставляют огромный объем инфраструктуры для поддержки понятия объектов; Вы можете взглянуть на них. Дайте мне знать, если вам нужны указатели.

1 голос
/ 27 ноября 2009

Может не быть объектно-ориентированным по схеме PLT Согласно документу , PLT Scheme имеет собственную ОО-систему.

Итак, набор на основе ОО может быть реализован следующим образом:

;; define set class
(define set%
    (class object%
        (init init-elems)
        (define elements elems)
        (super-new)
        (define/public (add elem)
           ;; TODO: check if “elem” is already included in “elements”
           (set! elements (cons elem elements)))
        ;; and so on...
        ))
...