3
我正在學習衛生,並且試圖在Scheme中做一個簡單的循環。我想支持3種結構的如示例如下請在計劃中重構我的宏
(for i = 1 : (< i 4) : (++ i)
(printf "Multiplication Table for ~s\n" i)
(for j = 1 to 5
(printf "~s * ~s = ~s\n" i j (* i j))))
我也想for循環與過濾器這樣的支持:
(for k = 1 : 10 : (list even? (λ(x) (> x 4))) : (++ k)
(print k))
我有這個,但我可以看到大量的重複。請幫我刪除冗餘。
(define-syntax for
(syntax-rules (= to :)
[(for x = initial : final : conditions : increment body ...)
(letrec ([loop (λ(x)
(when (<= x final)
(when (andmap (λ(condition) (condition x)) conditions)
body ...)
(loop increment)))])
(loop initial))]
[(for x = initial : condition : increment body ...)
(letrec ([loop (λ(x)
(when condition
body ...
(loop increment)))])
(loop initial))]
[(for x = initial to n body)
(for x = initial : (<= x n) : (+ x 1) body)]))
您希望中斷符號的分配和條件檢查和增量的前綴。爲什麼? – 2009-11-30 08:36:56
對不起,我沒有得到你,你指的是哪種特殊情況? – unj2 2009-11-30 14:25:20