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

您所做的是通过闭包实现对象的“通常”方案方式。您当然可以继续为选择器定义一些便利功能:

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

我不确定我是否理解您对选择器“正确”使用的要求。毕竟,您已经知道它有效...

于 2012-10-15T04:57:01.187 回答