Я хотел бы создать синтаксическую форму в Racket, которая может принимать ключевое слово аргумент, как это могут делать некоторые функции.
Сократив его до простого примера, я попытался написать:
(define-syntax sum-of-products
(syntax-rules (#:extra)
[(sum-of-products ([a b]...))
(+ (* a b)...)]
[(sum-of-products ([a b]...) #:extra extra)
(+ extra (* a b)...)]))
Так, чтобы работало следующее:
(sum-of-products ([2 2] [3 3])) → 13
(sum-of-products ([2 2] [3 3]) #:extra 5) → 18
К сожалению, Racket называет это "плохим синтаксисом", поэтому очевидно, что эта попытка была неправильной.
Можно ли это сделать?