У меня есть несколько функций, соответствующие для структур, которые выглядят как такие:абстрагируясь от матча в ракетке
(define (get-bounding-y struct-lst)
(flatten (for/list ([i struct-lst])
(match i
[(line _ _ _ _ _ y1 _ y2) (list y1 y2)]
[(arc _ _ _ _ _ y radius _ _ _ _ _ _ _ _) (list (+ y radius) (- y radius))]
[(point _ _ _ _ _ y) (list y)]
[(path _ _ _ _ path-list) (get-bounding-y path-list)]))))
Я хотел бы абстрагироваться это далеко, так что функция структуры
(Сличитель (struct-name1 return-value) (struct-name2 return-value) ...)
ie (согласование (строка (+ 1 x1)) (радиус дуги) (точка x) (объекты траектории)) будет вернуть это:
(match a-struct
[(struct* line ([x1 x1])) (+ 1 x1)]
[(struct* arc ([radius radius])) radius]
[(struct* point ([x x])) x]
[(struct* path ([entities entities])) entities])
Возможно ли это?
Должно быть легко с макросом, но ваши данные, похоже, пропустят некоторые вещи. – leppie
Эй, какие подробности мне не хватает? – KRC
Данную '(строка x1)', где используется 'x1', или, альтернативно, в чем смысл« привязки »' ([x1 x1]) '? Кроме того, вам нужно будет передать 'a-struct' где-нибудь в' matcher'. – leppie