1

単純な 2x2 マトリックスのコンストラクターとセレクターを開発しようとしていますが、作成したものが正しいかどうかはわかりません。これは、4 つの要素を持つリストを取り、2x2 を作成します。

(define matrix2x2
  (lambda (list)

    (define to-list list) ;returns the list form of this matrix
    (define get-place ;returns a place based on input row col
      (lambda (row col)
        (cond ((and (equal? row 1) (equal? col 1)) (car list))
              ((and (equal? row 1) (equal? col 2)) (car (cdr list)))
              ((and (equal? row 2) (equal? col 1)) (car (cdr (cdr list))))
              ((and (equal? row 2) (equal? col 2)) (car (cdr (cdr (cdr list)))))
              (else (display "no such place")))))

    (lambda (ret)
      (cond ((eq? ret 'get-place) get-place)
            ((eq? ret 'to-list) to-list)
            (else (error "Unknown request" ret))))))

;tests
(define my-matrix (m2x2 '(8 1 2 7)))
((my-matrix 'get-place) 2 2)
(my-matrix 'to-list)

これは機能します...しかし、セレクターを適切に使用しているかどうかはわかりません。

4

1 に答える 1

1

あなたが行ったことは、クロージャを介してオブジェクトを実装する「通常の」Scheme の方法です。もちろん、セレクターにいくつかの便利な関数を定義することもできます。

(define (get-place matrix ix) ((matrix 'get-place) ix)
(define (matrix->list matrix) ...)

セレクターの「適切な」使用についてあなたが何を求めているのか理解できません。結局のところ、あなたはそれが機能することをすでに知っています...

于 2012-10-15T04:57:01.187 に答える