時々iterateを使用しますが、結果のリストに 引数が必要なことはめったにありません。元の要素で始まる `iterate`の理由はありますか?
ドキュメントから:
iterate f x == [x, f x, f (f x), ...]
私はdrop 1
それをすることができますが、私はこの1つのような基本的な機能を設計するための実装から良い理由(多分無料定理)の独立が存在するかどうかを疑問に思います。
時々iterateを使用しますが、結果のリストに 引数が必要なことはめったにありません。元の要素で始まる `iterate`の理由はありますか?
ドキュメントから:
iterate f x == [x, f x, f (f x), ...]
私はdrop 1
それをすることができますが、私はこの1つのような基本的な機能を設計するための実装から良い理由(多分無料定理)の独立が存在するかどうかを疑問に思います。
反復関数アプリケーションの話をするとf^m(f^n(x)) == f^(m+n)(x)
のようなアイデンティティは、すべての自然数m
とn
ため を保持するように、f^0 == id
を定義することが便利です。このことを念頭に置いて定義して
、最初の引数を含めることによってiterate
満たし、次のアイデンティティを:
iterate f x !! n == f^n x
あなただけiterate f x
の出力を持っている場合は、簡単にしたいというものを得ることができます。しかし、[f x, f (f x),...]
しかなければ、iterate f x
を取得することはできません。詳しく知りたい場合は、オリジナルのx
を知っている必要があります。したがって、正面にx
をドロップすることは、正当な理由がないのに情報を失うことを意味します。
あなた自身の提案で 'iterate f x = x:iterate f(f x)'を実行してください。 – Alec
これはHaskellの報告書です:https://www.haskell.org/onlinereport/haskell2010/haskellch20.html#x28-22800020 – Sibi
通常、 'f^0 = id'です。 – chepner