PLT-Scheme .......设置为对象

时间:2009-11-27 02:58:57

标签: racket

好的,我正在尝试使用对象制作一个“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 个答案:

答案 0 :(得分:2)

是的,这可以看作是对象的使用。通过将每个对象建模为响应消息的函数,您实际上是“滚动自己的”对象系统。

但请注意,系统编写时存在一个主要缺点。假设您想要交叉两个集合,两个集合都表示为对象。调用“交叉”方法不起作用。你知道为什么吗?

更一般地说,PLT Scheme(和许多其他语言)提供了大量的基础设施来支持对象的概念;你可能想看看这些。如果您需要指针,请告诉我。

答案 1 :(得分:1)

它可能不是PLT Scheme方式中面向对象的 。 根据{{​​3}},PLT计划有自己的OO系统。

因此,基于OO的集可能实现如下:

;; 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...
        ))