実数の分数表記

すべての実数は次のように表すことができる
\Large N=a0+\frac{1}{a1+\frac{1}{a2+\frac{1}{a3+\frac{1}{a4+\dots}}}}

   tex:\Large N=a0+\frac{1}{a1+\frac{1}{a2+\frac{1}{a3+\frac{1}{a4+\dots}}}}]

と物の本に書いてあります。


これがJ言語では、
pr=:[+1:%]
と定義できるようです。(Kenneth Iverson)


以下実験です。

   pr=:[+1:%]
   pr
 +-+-+--------+
 |[|+|+--+-+-+|
 | | ||1:|%|]||
 | | |+--+-+-+|
 +-+-+--------+
   2 pr 5
2.2
   pr/ 2 5
2.2
   pr/2 5 5
2.19231
   2 + 1%5
2.2
   2+(1%(5+(1%5)))
2.19231

関数prの定義が分かりにくいので、まずprとだけタイプして改行すると、J言語による解析をしてくれます。
つまり、prは3つの関数からなる定義で、三つ目が再度3つの関数からなる定義になっています。
3つの関数の両サイドに引数を作用させると、両引数が両方とも1番目の関数と3番目の関数に作用して、その結果を真ん中の関数が処理します。
2 pr 5の場合、2[5=>2、2(1:%])5=>1%5=>0.2となり、この結果の2と0.2を足して2+0.2=>2.2が結果になります。
pr/2 5のスラッシュは数列の間にすべてprを作用させるということで、2 pr 5と同じになります。
pr/ 2 5 5は、同様に2 pr 5 pr 5になります。この結果を当初の目的の
\Large N=a0+\frac{1}{a1+\frac{1}{a2+\frac{1}{a3+\frac{1}{a4+\dots}}}}
の結果になっていることを最後に検証しています。


追記:
prを使って、フィボナッチ数列が作成できます。

   pr/\ 1 1 1 1 1 1 1 1 1 1r1
1 2 3r2 5r3 8r5 13r8 21r13 34r21 55r34 89r55
   pr/\ 1 1 1 1 1 1 1 1 1 1
1 2 1.5 1.66667 1.6 1.625 1.61538 1.61905 1.61765 1.61818

1r1というのは結果を実数で出したいときの引数の与え方です。
ただの1にすると結果が小数で表されます。
1.618って黄金比でしたっけ?
黄金比に収束するということでしょうか。
不思議ですね。


追記;
ほんとうに収束するかどうかの実験
 \frac{\(1 + \sqrt 5\)}{2}

   tex: \frac{\(1 + \sqrt 5\)}{2}]
   pr=:[+1:%]
   pr/\ 1 1 1 1 1 1 1 1 1 1 1 1r1
1 2 3r2 5r3 8r5 13r8 21r13 34r21 55r34 89r55 144r89 233r144
   pr1=:1:+1:%]
   pr1 ^:7 (2)
1.61765
   pr1 ^:7 (2r1)
55r34
   pr1 ^:100 (2)
1.61803
   pr1 ^:_ (2)
1.61803
   2 %~ 1 + %:5
1.61803
   (pr1 ^:_ (2)) = (2 %~ 1 + %:5)
1

^:7とかはその前の関数を7回適用するという意味で、^:_は無限回適用するという意味になります。
これが、 \frac{\(1 + \sqrt 5\)}{2}の結果と同一になることが確認できました。