22

このコードの何が問題なのか (構文的に) 誰が教えてくれますか?

-- merge two sorted lists
mergeX [] b res = b ++ res
mergeX a [] res = a ++ res
mergeX a:as b:bs res
    | a > b     = mergeX as b:bs a:res
    | otherwise = mergeX a:as bs b:res

通訳者:

パターンの解析エラー: mergeX

4

2 に答える 2

40

括弧が必要です:

mergeX [] b res = b ++ res
mergeX a [] res = a ++ res
mergeX (a:as) (b:bs) res
    | a > b     = mergeX as (b:bs) (a:res)
    | otherwise = mergeX (a:as) bs (b:res)

その理由は:、関数適用よりも優先順位が低いため、次のようmergeX a:as b:bs resに解析されるためです。

(mergeX a):(as b):(bs res)

これはエラーです。

于 2011-12-19T13:06:52.700 に答える
2

コンストラクターのパターン (またはどのように呼び出されても) を括弧で囲む必要があります。

mergeX (a:as) (b:bs) res 
于 2011-12-19T13:08:34.467 に答える