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

はい、これはオブジェクトの使用と見なすことができます。メッセージに応答する関数として各オブジェクトをモデル化することにより、基本的に「独自の」オブジェクト システムを作成しています。

ただし、あなたが書いたシステムの大きな欠点に注意してください。オブジェクトとして表される 2 つのセットを交差させたいとします。「交差」メソッドを呼び出しても機能しません。理由がわかりますか?

より一般的には、PLT スキーム (および他の多くの言語) は、オブジェクトの概念をサポートするための膨大な量のインフラストラクチャを提供します。あなたはこれらを見てみたいかもしれません。ポインタが必要な場合はお知らせください。

于 2009-12-17T02:08:13.113 に答える
1

PLT 方式ではオブジェクト指向ではないかもしれません。ドキュメントによると、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...
        ))
于 2009-11-27T05:58:40.260 に答える