#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
, чтобы выяснить, какое поле вы хотите извлечь.