数値を指定してリストを作成すると、リストにその値に基づいて正しい位置に番号が挿入された新しいリストが返されます。 (私は挿入ソートをやっている。)リスト内の項目の比較
let rec insertinto number numbers =
match numbers with
| [] -> [number]
| head::tail -> if head > number then number::numbers else head::(insertinto number tail)
F#は、このメソッドの型があることを推測:
val insertinto : 'a -> 'a list -> 'a list when 'a : comparison
私は
を取得し、私は[4; 10; 15] |> insertinto 12
でこのメソッドをテストする場合
val it : int list = [4; 12; 10; 15]
明らかに間違っています。比較 'head> number'が正しく動作していません。
それを動作させるために、私は数字パラメータの型を指定する必要があります。そして、
let rec insertinto number numbers: int list =
それすべての作品が、私は、私は仕事にこれをしたい、int型のリストにすべての時間を使用したくありませんどのようなタイプのリストでもよい。型が比較を実装する限り、確かに動作するはずです。
なぜこれはintリストで動作し、汎用リストでは機能しませんか?私は何が欠けていますか?
編集
okが、これはモノラルのみの問題であるように思われます。
私のための作品...どのようなプラットフォームを使用していますか? – kvb
元の関数は、型宣言なしで、うまく動作します。偶然、fsiでVisual Studioでこれをやっていますか?私はVisual Studioを使用してテキストを選択し、alt-enterを使用してfsiウィンドウに送りますが、時にはエラーが発生してVSエディタで更新しますが、fsiに再度送り返すことを忘れてしまいます。したがって、2つは同期しておらず、fsiで関数を再実行すると少し不快になることがあります(特に、朝曜の朝の最初のもの)。あなたは見ている動作を確実に再現できますか? – Juliet
それは面白いです。私はMacでMonodevelopでこれをやっています。 –