この関数がHaskellで終了しないのはなぜですか?


8

自分自身の時間nestを構成する私の機能がなぜ混乱するのかfn

nest f 0 = id
nest f n = f . nest f (n - 1)

終了することはありません。nゼロになると「パターンマッチ」になると思っていたでしょう。これらの2行をGHCIに入力してnest (+ 1) 2 3、たとえばを呼び出すことで定義します。


4
我々はより多くを必要とします。この関数をどのように定義してロードしますか?この関数をどのように呼び出しますか?ファイルとして保存するときは、GHCi 8.6.4でロードし、nest (+1) 3 2で終了するときに呼び出します5
Thomas M. DuBuisson

1
おもしろい。私はGHCIに貼り付け、あなたと同じようにと呼びましたnest (+1) 3 2
Jon Deaton

回答:


12

2つの別々のREPL行に関数を入力することにより、基本的に2回目に再定義し、基本ケースを省略します。

この関数をREPLに入力する正しい方法は次のとおりです。

nest f 0 = id; nest f n = f . nest f (n - 1)

または、:{コマンドを使用して複数行モードに入り、を使用してそのままにすることもできます:}


6

これをGHCiに貼り付けたときに行ったのは、の1つの関数を定義することでしたnest f 0 = id。次に、「その関数を無視して、定義全体が同じ名前の新しい関数に置き換えnest f n = f . nest f (n - 1)ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.