私はこれで何時間も立ち往生しています-誰かが私を助けてくれるかどうか疑問に思っています.
長さの異なる 2 つのリストがあり、2 つのリストの長さが同じになるように、短い方のリストに 0 を埋め込みたいと考えています。
再帰を使用せずに、折りたたみ関数を使用してこれを行いたいです。
どんなヒントでも大歓迎です!
私はこれで何時間も立ち往生しています-誰かが私を助けてくれるかどうか疑問に思っています.
長さの異なる 2 つのリストがあり、2 つのリストの長さが同じになるように、短い方のリストに 0 を埋め込みたいと考えています。
再帰を使用せずに、折りたたみ関数を使用してこれを行いたいです。
どんなヒントでも大歓迎です!
これは宿題のように思えます (一部には、許可される解に対する多少恣意的な制限が原因です)。したがって、コードを書くだけでは実際には役に立ちません。宿題をする必要がまったくなくなります。ただし、他の方法を支援するのに十分な情報を提供していません。問題に費やした時間の間に書いた最良のコードを示し、それが機能しないと思う理由を説明していただければ、支援がはるかに簡単になります。そうすれば、人々はコードの何が問題なのかを教えてくれ、具体的なヒントを与えることができます。
「折りたたみ機能」が何を意味するのかは完全には明らかではありません。List.fold_left2
orを使用して両方のリストを一度に折りたたむことはできませんList.fold_right2
。これらは、入力リストが既に同じ長さであると想定しているためです。これは葉List.fold_left
とList.fold_right
(私には思えます)。
2 つのリストの長さを取得するために最初のパスを作成することが許可されている場合は、短い方のリストを折りたたんで、最後にパディングを追加したコピーを作成できます。(非常に長いリストではうまく機能しませんが、右折りが最も簡単です。)
このアプローチの問題点の 1 つは、パディングを個別に作成する必要があり、これには再帰が必要になる可能性があることです (主に OCaml ライブラリの制限によるものです)。もう 1 つの方法は、長いリストを折りたたんで、短いリストをトラバースしてコピーすることです。長いリストは、短いリストが使い果たされたときに追加するパディングの量を示す尺度として機能します。これはかなり複雑になります。
いずれかのアプローチを検討する価値があると思われる場合はList.fold_right
、リストをコピーするためだけに使用する関数を作成することから始めることができます。これはあなたがやりたいことにかなり近いです(私には思えます)。