5

f^:proposition^:_ yタイトルが示すように、while ループの理由がわかりません。実際に2回ほど使用しましたが、使い方がよくわかりません。関数が繰り返されること^:はわかりますが、そのステートメントでの二重の使用に混乱しています。

また、なぜf^:proposition^:a: y機能するのか理解できません。これは前のものと同じですが、上記のように最後のものだけではなく、すべての反復から値を返します。

a:は空箱で、特別な意味を持っていると^:わかりましたが、辞書を引いても意味がわかりませんでした。

ありがとう。

4

2 に答える 2

3

f^:proposition^:_while ループではありません。orを返すときは(ほぼ) while ループです。他の結果を返すときは、奇妙な種類の while ループです。proposition10proposition

単純なモナドのケースを考えてみましょう。

f =: +:        NB. Double
v =: 20 > ]    NB. y less than 20

(f^:v^:_) 0     NB. steady case
0
(f^:v^:_) 1     NB. (f^:1) y, until (v y) = 0
32
(f^:v^:_) 2
32
(f^:v^:_) 5
20
(f^:v^:_) 21   NB. (f^:0) y
21

これが起こっていることです: そのたびにv y,1(f^:1) y実行されます. の結果(f^:1) yは newyなどです。

  • y2回続けて同じだったら→出力yして停止。
  • だったら→出力しv yて停止。0y

ここf^:v^:_では、次のように動作しますdouble while less than 20 (or until the result doesn't change)

/の代わりに/をv返すとどうなるか見てみましょう。2010

 v =: 2 * 20 > ]

(f^:v^:_) 0      NB. steady state
0
(f^:v^:_) 1      NB. (f^:2) 1 = 4 -> (f^:2) 4 = 16 -> (f^:2) 16 = 64 [ -> (f^:0) 64 ]
64
(f^:v^:_) 2      NB. (f^:2) 2 = 8 -> (f^:2) 8 = 32 [ -> (f^:0) 32 ]
32
(f^:v^:_) 5      NB. (f^:2) 5 = 20 [ -> (f^:0) 20 ]
20
(f^:v^:_) 21     NB. [ (f^:0) 21 ]
21

で遊ぶことで、さまざまな種類の「奇妙な」ループを作成できますv。( の逆数を使用するために、負の整数を返すことさえできますf)。

于 2013-09-08T12:51:35.753 に答える