我試圖對位置列表中的每個位置(這是一個列表)進行排序。目前我doint這樣的:F#列表中的排序列表F#
type Position = Position of list<int * Piece>
和我的功能:
let SortPositionList positionList : Position list =
let rec loop list =
match (list: Position list) with
| [] -> []
| hd::tl -> [List.sortBy(fun (x:(int*Piece)) -> fst x)(GetInternStruct(hd))::loop tl]
loop positionList
在我的腦海裏,這可以通過與其他recursivelly列表進行排序,實際的頭部,然後CONCAT它做的名單,但它不起作用。此功能中的錯誤爲:
類型不匹配。期待(INT *片)名單列表,但給出一個(INT *件)列表列表列表類型「詮釋*海賊王」不匹配的類型「(INT *片)名單」,在強調loop tl
類型不匹配。期望一個位置列表,但給出一個(int * piece)列表列表類型'位置'與類型'(int * piece)列表列表'不匹配,在下劃線調用循環中,loop positionList
希望你能幫助,在此先感謝
佩德羅Dusso
編輯 AList.map經過排序功能將是一個很好的形式給出?
SOLUTION
let SortPositionList (positionList : Position list) =
List.map (fun (Position(position)) -> List.sort(position)) positionList
由於我的職位結構是一個爲(int *片)LST,我模式在anonimous功能匹配,並分類整理。
感謝您的答案!
Tomas,我或多或少地理解你對''[']'所說的話,我有一個必須生成位置列表的函數。讓我們用board1 = Position [(1,Piece.BLACK);(2,Piece.WHITE);(6,Piece.BLACK ); ...] 例如,您提議的所有解決方案d對我來說,現在我更好地理解了慣用語。但是我應該如何解決這個問題?非常感謝Pedro Dusso(PS:我買了你的書!!! :) – 2010-07-04 00:21:34
我不確定我完全按照你的描述 - 你有一個位置列表作爲輸入(這意味着你有一個列表元組'int * Piece')。你想得到什麼結果?你的原始問題似乎表明你想獲得排序位置的列表(這是一個包含元組排序列表的列表)。那是對的嗎? – 2010-07-04 00:30:36
是的!這是正確的。函數工作完美,但因爲我需要使用元組進行排序,所以最終結果是一個(int * Piece)列表列表。如你所見,我的位置==(int * Piece)列表。所以我的最後一個問題是如何「投」這個,畢竟他們有我認爲相同的「結構」。感謝所有 – 2010-07-04 00:46:13