好的,我正在尝试使用对象制作一个“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)))))))
这样做有用吗?这是使用对象吗?如果没有,你能告诉我怎么...谢谢
答案 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...
))