0

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

那么这行得通吗..这是使用对象吗?如果不能,你能告诉我如何......谢谢

4

2 回答 2

2

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

但是请注意,您编写的系统存在一个主要缺点。假设您要使两个集合相交,它们都表示为对象。调用你的“相交”方法是行不通的。你明白为什么吗?

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

于 2009-12-17T02:08:13.113 回答
1

它可能不是以 PLT Scheme 方式面向对象的。根据文档,PLT Scheme 有自己的 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...
        ))
于 2009-11-27T05:58:40.260 回答