我的問題就像是一個here。檢查sml中的char列表列表的內容
我正在處理一個char列表,我需要檢查1-9在每個列表中使用過一次,而且在列表中的每個位置都使用一次。
我的代碼如下所示:
infix member
fun x member [] = false
| x member (y::ys) = x = y orelse x member ys;
fun rscheck xs =
let
val ys = [#"1",#"2",#"3",#"4",#"5",#"6",#"7",#"8",#"9"]
in
ys member xs
end;
但這只是檢查1-9是名單中的成員,而不是如果他們在不同的列表中的相同位置。
我有想法,使用此功能:
fun poslist xs n = map (fn x => List.nth (x , n)) xs;
(功能poslist應該返回無論是在列表XS的位置n,這樣我就可以在焦炭名單列表隔離單個列表),但是由於poslist返回一個char列表,rscheck無法使用它,因爲它需要一個char列表列表。
1)我可以改善嗎?
2)如何修復rscheck?
編輯
infix member
fun x member [] = false
| x member (y::ys) = x = y orelse x member ys;
fun samelist (x::xs) ys = x member ys andalso samelist xs ys
| samelist [] _ = true;
fun takelist xs n = map (fn x => List.nth (x , n)) xs;
fun reverse xs = List.tabulate (9 , fn x => takelist xs x);
fun rscheck xs =
let
val s = [#"1",#"2",#"3",#"4",#"5",#"6",#"7",#"8",#"9"]
in
List.all (fn x => samelist s x) xs
end andalso rscheck (reverse xs);
因爲我不知道OCaml的翻譯可能有點難以矩陣。我可以使用poslist,但是因爲它返回一個char列表,而rscheck和char列表一起工作,我不完全確定如何工作 – GeorgeWChubby 2010-10-23 15:53:50
@George:對,它返回一個char列表。所以如果你用0到8的索引來調用它,你會得到9個char列表。如果你把它們放在一個列表中,你將會有一個'char list list'。 – sepp2k 2010-10-23 16:04:02
我該怎麼做?我認爲使用@可以工作,但這只是一個單一的char列表。你有什麼想法如何創建一個char列表? – GeorgeWChubby 2010-10-23 16:48:04