Scheme で書いたマクロを Clojure で再実装すると困ってしまう。マクロは、後で使用するために、テスト データのペアをall-tests
var にロードしようとします。
マクロの引数は可変長で、特殊な未定義シンボル、つまり が含まれているため、=>
Schemy syntax-rules のようにそれを解析する方法がわかりません。
スキームのバージョン:
(define all-tests '())
;;; load tests into all-tests
(define-syntax add-tests-with-string-output
(syntax-rules (=>)
[(_ test-name [expr => output-string] ...)
(set! all-tests
(cons
'(test-name [expr string output-string] ...)
all-tests))]))
(add-tests-with-string-output "integers"
[0 => "0\n"]
[1 => "1\n"]
[-1 => "-1\n"]
[10 => "10\n"]
[-10 => "-10\n"]
[2736 => "2736\n"]
[-2736 => "-2736\n"]
[536870911 => "536870911\n"]
[-536870912 => "-536870912\n"]
)
私の現在の失敗した Clojure バージョン:
(def all-tests (atom '()))
(defmacro add-tests-with-string-output
[test-name & body]
`(loop [bds# (list body)]
(when-not (empty? bds#)
(println (first bds#))
(recur (rest bds#)))))
Ps: 私はprintln
今自分のコードをテストするために使用しています。動作したら、解析と読み込みの作業を試みます。