使用字符串元组列表键入统一问题

时间:2010-11-09 23:16:42

标签: haskell

有人加入了#haskell,并问了一个相当新手的作业问题。你如何排序两个相等长度的字符串元组列表?为了帮助他们 - 我的Haskell很糟糕 - 我写了这个。

sortBy (\(x:y) (x':y') -> let { a = x `compare` x'; b = y `compare` y' } in if a == EQ then b else a ) $ let f (a,b) = a++b in f ( [("a", "b"), ("e", "b"), ("x", "b"), ("x", "g")], [("b", "c"),("b", "d"), ("g", "a"), ("g", "c")] )

我认为这远非奏效。为什么这不起作用:

sortBy (\(x:y) (x':y') -> undefined) $ [("a","b"),("e","b"),("x","b"),("x","g"),("b","c"),("b","d"),("g","a"),("g","c")]

我收到此错误

<interactive>:1:67:
    Couldn't match expected type `[t]'
           against inferred type `([Char], [Char])'
    In the expression: ("a", "b")
    In the expression: [("a", "b"), ("e", "b"), ("x", "b"), ("x", "g")]
    In the first argument of `f', namely
        `([("a", "b"), ("e", "b"), ("x", "b"), ("x", "g")], 
          [("b", "c"), ("b", "d"), ("g", "a"), ("g", "c")])'

我将这些放在多行上,但我不确定在哪里打破它们以使它们起作用(Haskell的空白是愚蠢的)。

SortBy的类型为sortBy :: (a -> a -> Ordering) -> [a] -> [a] 我的列表的类型为[([Char], [Char])]

a如何与([Char], [Char])无法统一

sortBy :: (([Char], [Char]) -> ([Char], [Char]) -> Ordering) -> [([Char], [Char])] -> [([Char], [Char])]`

1 个答案:

答案 0 :(得分:3)

尝试下一个

sortBy (\(x,y) (x',y') -> let { a = x `compare` x'; b = y `compare` y' } in if a == EQ then b else a ) $ let f (a,b) = a++b in f ( [("a", "b"), ("e", "b"), ("x", "b"), ("x", "g")], [("b", "c"),("b", "d"), ("g", "a"), ("g", "c")] )

对我来说这看起来像是一个错字。 (:)是一个列表构造函数。使用(,)构造元组