たとえば、拡張ユークリッド アルゴリズム (wiki から引用):
function extended_gcd(a, b)
x := 0 lastx := 1
y := 1 lasty := 0
while b ≠ 0
quotient := a div b
(a, b) := (b, a mod b)
(x, lastx) := (lastx - quotient*x, x)
(y, lasty) := (lasty - quotient*y, y)
return (lastx, lasty)
私が試して得たもの:
(defn extended-gcd
[a b]
(loop [a a b b x 0 y 1 lx 1 ly 0]
(if (zero? b)
[lx ly]
(recur b (mod a b)
(- lx (* (int (/ a b)) x))
(- ly (* (int (/ a b)) y))
x y))))
シーケンスを扱うループを翻訳する方法を見つけることができたと思います。しかし、これはどうですか?clojure の方法でどのように記述しますか? ループの繰り返しではなく、マップ、リデュースなどを使用したもの。