遅延リストを、できればよく知らない言語で実装してください[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Code Golf Stack Exchangeのトピックになるようにします。 閉じた3年前。 これは、あなたが学習するつもりだったプログラミング言語をより流に習得するための良い演習ですが、ほんの少しだけいじっています。これには、オブジェクトの操作、クロージャーの使用またはシミュレーション、型システムの拡張が含まれます。 あなたのタスクは、遅延リストを管理するコードを記述し、それを使用してフィボナッチ数を生成するためのこのアルゴリズムを実装することです。 コードサンプルはHaskellにあります let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in take 40 fibs 結果: [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986] 遅延リストの実装は、次のガイドラインを満たす必要があります。 リストノードは、次の3つのいずれかです。 Nil-空のリスト。 [] 短所-単一のアイテム、残りの項目のリストとペア: 1 : [2,3,4,5] (: Haskellの短所演算子です) サンク-必要なときにListノードを生成する遅延計算。 次の操作をサポートしています。 nil-空のリストを作成します。 cons-コンスセルを構築します。 thunk-引数を取らず、NilまたはConsを返す関数を指定して、Thunkを構築します。 force-リストノードが与えられた場合: NilまたはConsの場合は、単にそれを返します。 サンクの場合、その関数を呼び出してNilまたはConsを取得します。サンクをそのNilまたはConsに置き換えて返します。 注:サンクを強制値に置き換えることは、「遅延」の定義の重要な部分です。このステップをスキップすると、上記のフィボナッチアルゴリズムは非常に遅くなります。 empty-ListノードがNilかどうかを確認します(強制した後)。 head(別名「車」)-リストの最初の項目を取得します(またはNilの場合は適合をスローします)。 …