2

より冗長なラムダ式を非表示にするための短縮構文を作成するマクロを作成したいと思いますが、マクロの作成方法を理解するのに苦労しています (マクロの使用に対する議論であることがわかります)。

この例を考えると:

(define alist-example
  '((x 1 2 3) (y 4 5 6) (z 7 8 9)))

(define ($ alist name)
  (cdr (assoc name alist)))

((lambda (a) (map (lambda (x y z) (+ x y z)) ($ a 'x) ($ a 'y) ($ a 'z))) alist-example)
((lambda (a) (map (lambda (y) (/ y (apply max ($ a 'y)))) ($ a 'y))) alist-example)

with-alist次のような最後の 2 つの式を記述できるマクロ を書きたいと思います。

(with-alist alist-example (+ x y z))
(with-alist alist-example (/ y (apply max y)))

アドバイスや提案はありますか?

4

2 に答える 2