схема — создание круга в активном методе

#scheme

#схема

Вопрос:

В следующем коде мы построим круг в Scheme:

  (define make-circle (lambda (x-center y-center radius)
(cons 'circle 
(lambda (m)
        (cond ((eq? m 'x) x-center)
                  ((eq? m 'y) y-center)
        (else radius))))))
  

Что означает переменная m? значение — откуда мы получаем m, и что означает, например, cond: « ((eq? m 'x) x-center) «.

Ответ №1:

m скорее всего, означает «сообщение». Она может использоваться для извлечения соответствующих полей структуры данных circle, например

 (define my-circle (make-circle 1 2 3))

; cdr is here because circle is a cons of 'circle and lambda, 
; better abstract it out in real code
((cdr my-circle) 'y) 
  

приведет к 2 . Анонимная функция (лямбда) проводит тесты m , чтобы выяснить, какое поле вы хотите извлечь.