4 関数型プログラミングで永続データ構造を使用するのはなぜですか? 関数型プログラミングでは、永続的なデータ構造と不変オブジェクトが使用されます。私の質問は、なぜこのようなデータ構造をここに持つことが重要なのですか?データ構造が永続的でない場合、どうなるかを低レベルで理解したいですか?プログラムはより頻繁にクラッシュしますか? 22 data-structures functional-programming programming-paradigms persistent-data-structure
1 どのクラスのデータ構造を永続化できますか? 永続データ構造は不変のデータ構造です。それらに対する操作は、データ構造の新しい「コピー」を返しますが、操作によって変更されます。ただし、古いデータ構造は変更されません。一般に、効率性は、基礎となるデータの一部を共有し、データ構造の完全なコピーを回避することにより達成されます。 質問: (同じまたは非常に類似した複雑さを維持しながら)永続化できるデータ構造のクラスに関する結果はありますか? (同じまたは非常に類似した複雑さを維持しながら)すべてのデータ構造を永続化できますか? (同じまたは非常に類似した複雑さを維持しながら)永続化できないデータ構造はありますか? 19 reference-request data-structures functional-programming persistent-data-structure
2 配列に似た不変の(永続的な)データ構造の実装で、高速なインデックス付け、追加、追加、繰り返し 配列に似た永続的なデータ構造(ただし不変)を探しています。これにより、高速なインデックス作成、追加、先頭付加、反復(適切な局所性)操作が可能になります。 Clojureは永続的なVectorを提供しますが、これは高速追加専用です。ScalaのVectorは効果的に一定時間の追加と付加を行いますが、Clojureベクトルと同じデータ構造(ビットマップベクトルトライ)に基づいているため、実装方法を取得できません。いくつかのトリックがないと、高速なプリペンドはできません。 すぐに使用できる実装ではなく、そのようなデータ構造を自分で実装する方法の説明に興味があります。 11 data-structures functional-programming persistent-data-structure