*
から+
、そして最終的には からどのように構築できるかを考えていました。次に、より低い関数 b を使用するという同じパターンを適用して、ハイパーネスが増加し続ける超乗算関数の階段を得るという同じパターンを適用する別の方向に+
進みます。そこで私は、増え続けるハイパーオペレーターの無限リストをコーディングしてみることにしました。私はこれを思いつきました、これはかなり近いです!:inc
(f a b)
(defn operator-staircase
[]
(iterate
(fn [f]
(fn [a b]
(loop [bottom b
result a]
(if (>= 0 bottom)
result
(recur
(dec bottom)
(f a result))))))
(fn [a b]
(inc b))))
(def ops (operator-staircase))
((nth ops 0) 3 5) ;; --> 6 (inc is arity one so it must ignore one of the args?)
((nth ops 1) 3 5) ;; --> 8 (correct addition)
((nth ops 2) 3 5) ;; --> 18 (oops, one off! otherwise correctly multiplies.)
Basically implements (fn [a b] (* a (inc b)))
((nth ops 3) 3 5) ;; ----> 1092 (Wow)
どうすればいいのかわからないのは、イニシャルresult
を一般的な方法で定義することだけです! ちょっとうまくいくので作っただけa
ですが、たとえば足し算は0、掛け算は1でなければなりません。
result
上記のループでの初期値を定義して、すべてのケースで一般的な方法で機能するようにするにはどうすればよいですか?
前もって感謝します!