1. ホーム
  2. haskell

[解決済み] Haskellです。パターンでのパースエラー

2022-02-15 06:39:21

質問

このコードのどこが(構文的に)間違っているのか、誰か教えてください。

-- 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 のパースエラー

解決方法は?

括弧が必要です。

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)

というのはエラーになります。