一部の関数ができるように、キーワード引数を受け入れることができる構文形式を 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 はこれを「不適切な構文」と呼んでいるため、明らかにその試みは正しくありませんでした。
これはできますか?