2009-11-27 67 views
0

好吧,我正在嘗試使用對象創建「make-set」程序。我已經準備好所有編程的所有基本的套狀工會的程序和交叉,所以這-的成員是我到目前爲止我用化妝設置程序對象ahve:PLT-Scheme .......設置爲對象

(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))))))) 

那麼,這是否work..is這個使用對象?如果不是你能告訴我怎麼...謝謝

回答

1

它可能不會在PLT的計劃方式面向對象。 根據the document,PLT計劃有其自己的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... 
     )) 
2

是的,這可以看作是一個使用對象。通過將每個對象建模爲響應消息的函數,您本質上就是「滾動自己的」對象系統。

但是,請注意系統的一個主要缺點,就像你寫的那樣。假設你想要交集兩個集合,都表示爲對象。調用你的「相交」方法將不起作用。你明白爲什麼?更普遍的是,PLT方案(和許多其他語言)提供了大量的基礎設施來支持對象的概念;你可能想看看這些。讓我知道你是否需要指針。