0

リスト v1::v2::vn::[] をキューに変換するにはどうすればよいですか? これは私が今まで書いたすべてです:-

     let fromList (l:'a list) : 'a queue =
        let queue = create () in
        let rec loop (z: 'a list) (q: 'a queue) : 'a queue = 
             begin match z with 
             | [] -> None
             | hd :: tl ->
              end

ありがとうございました!

4

1 に答える 1

1

OK、変更可能なキュー タイプがあります。

リストを命令的に処理する慣用的な方法は withList.iterです。

代わりにこれを行うために独自の再帰関数を作成することを計画しているように見えますloop(おそらくこれは宿題のためです)。最初のコメントは、このような命令型コードを記述する場合、慣用的に行うことは、ではなく()( type の唯一の値) を返すことです。関数は、キューを (命令的に) 変更することで機能するため、常に を返します。unitNoneloop()

(私がいつも指摘しているように) 再帰について答えなければならない質問は次のとおりです。

  • 空のリストに対して何をする必要がありますか?

  • リストが空でない場合、その頭と尾をどうする必要がありますか?

このように尋ねられると、答えはかなり明白に思えます。しかし、そうでない場合、考えられるヒントは、既に知っている 2 つの関数を呼び出したいということです。1 つはリストの先頭用で、もう 1 つは末尾用です。

于 2013-02-23T19:58:39.677 に答える