3
我已經寫了這個方法給出一個數字,並且列表將返回一個新列表,其中列表中的數字根據其值插入列表中的正確位置。 (我做的插入排序。)比較列表中的項目
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列表,而不是一個通用的列表?我錯過了什麼?
編輯
確定,這似乎是一個僅適用於黑白的問題。
適用於我......您使用的是什麼平臺? – kvb 2011-01-10 17:18:44
您的原始函數,沒有類型聲明,適合我。偶然的機會,你在Visual Studio中用fsi做這個嗎?我喜歡使用Visual Studio,選擇文本,並使用alt-enter將它發送到fsi窗口 - 但是,偶爾會出現錯誤,我在VS編輯器中更新它,但忘記將其重新發回到fsi,所以這兩者不同步,當你在fsi中重新執行函數時(特別是在星期一早上的第一件事情),可能會有點不和諧。你能否可靠地重現你所看到的行爲? – Juliet 2011-01-10 17:40:37