2

Haskell で無限シーケンスが可能であることは知っていますが、それを生成する方法が完全にはわかりません

メソッドが与えられた場合

generate::Integer->Integer

これは整数を取り、シーケンスの次の整数を生成します。これから無限シーケンスを構築するにはどうすればよいですか?

4

3 に答える 3

14

シーケンスを 1 から開始する場合は、次のとおりです。

iterate generate 1

関数の最初の文字は大文字ではなく小文字であることに注意してください。それ以外の場合は、関数ではなくデータ型になります。

//編集:データ型が大文字で始まるだけでなく、データ コンストラクターまたは型クラスでもあることに気付きましたが、それは重要ではありませんでした。:)

于 2009-11-23T19:12:49.343 に答える
13

Matajon の回答に追加:iterateここで質問する以外の機能を発見する方法は、Hoogle を使用することです。

クエリに対する Hoogle の最初の回答 (a -> a) -> [a]iterate.

于 2009-11-23T19:27:37.350 に答える
7

いくつかの方法がありますが、その 1 つは次のとおりです。

gen :: (a -> a) -> a -> [a]
gen f s = s : gen f (f s)

この関数は、関数fといくつかの値を取り、sを返します。その後、同じと の結果でs自分自身を呼び出します。デモンストレーション:ff s

Prelude> :t succ
succ :: (Enum a) => a -> a
Prelude> let gen f s = s : gen f (f s)
Prelude> take 10 $ gen succ 3
[3,4,5,6,7,8,9,10,11,12]

上記の例では、あなたが言及succした機能として機能します。generate :: Integer -> Integerただしgen、 type の任意の関数で機能することに注意してa -> aください。

編集:実際、Prelude (および Data.List)genの関数と同じです。iterate

于 2009-11-23T19:15:58.247 に答える