Haskell解析错误输入`|' [英] Haskell parse error on input `|'

查看:131
本文介绍了Haskell解析错误输入`|'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Haskell不断给这个,我看不出为什么。试图用if / else重写,但后来抱怨... ...



错误信息; 2006grafen.hs:40:12:parse error on input`|'

代码:

 数据Edge a = Boog aa派生Show 
data Graph a = Graaf [a] [Edge a]派生Show

vindBuren :: Eq a => a - >图表a - > [a]
vindBuren _(Graaf list [])= []
vindBuren knoop(Graaf list((Boog x y):rest))
| knoop == x = y:(vindBuren knoop(Graaf list rest))
| knoop == y = x:(vindBuren knoop(Graaf list rest))
|否则= vindBuren knoop(Graaf列表休息)

graadKnoop ::等式a =>图表a - > a - > Int
graadKnoop graaf el = length(vindBuren el graaf)


buurgraadKnoop :: Eq a =>图表a - > a - > [Int]
buurgraadKnoop graaf el =
let
buren = vindBuren el graaf
in
reverse $ sort $ map(graadKnoop graaf)buren

buurgraad :: Eq a =>图表a - > [([Int],[a])]
buurgraad graaf = hulp graaf []


hulp :: Eq a =>图表a - > [([Int],[a])] - > (Graaf(fstN:restN)l)soFar
| elem bgraden(map fst soFar)= hulp(Graaf restN l)(mergeG fstN bgraden soFar)
|否则= hulp(Graaf restN l)[(bgraden,[fstN])]:soFar
其中
bgraden = buurgraadKnoop g fstN

mergeG :: a - > [Int] - > [([Int],[a])] - > [([Int],[a])]
mergeG n ngraden((gradenL,nodenL):rest)
| ngraden == gradenL =((gradenL,sort(nodenL:n)):rest
| otherwise = mergeG n ngraden rest

$ b $你忘了关闭((gradenL,sort(nodenL:n))中的圆括号。

前面的括号是多余的,所以你可以简单地写(gradenL,sort $ nodenL:n)


Haskell keeps giving this and I can't see why. Tried to rewrite with if/else but then it complains about that...

Error message; 2006grafen.hs:40:12: parse error on input `|'

Code:

data Edge a = Boog a a deriving Show
data Graph a = Graaf [a] [Edge a] deriving Show

vindBuren :: Eq a => a -> Graph a -> [a]
vindBuren _ (Graaf list []) = []
vindBuren knoop (Graaf list ((Boog x y):rest))
       | knoop == x = y : (vindBuren knoop (Graaf list rest))
       | knoop == y = x : (vindBuren knoop (Graaf list rest))
       | otherwise = vindBuren knoop (Graaf list rest)

graadKnoop :: Eq a => Graph a -> a -> Int
graadKnoop graaf el = length (vindBuren el graaf) 


buurgraadKnoop :: Eq a => Graph a -> a -> [Int]
buurgraadKnoop graaf el = 
       let
           buren = vindBuren el graaf
       in
          reverse $ sort $ map (graadKnoop graaf) buren

buurgraad :: Eq a => Graph a -> [([Int],[a])]
buurgraad graaf = hulp graaf []


hulp :: Eq a => Graph a -> [([Int],[a])] -> [([Int],[a])]
hulp (Graaf [] bgL) soFar = soFar
hulp g@(Graaf (fstN:restN) l) soFar
       | elem bgraden (map fst soFar) = hulp (Graaf restN l) (mergeG fstN bgraden soFar)
       | otherwise = hulp (Graaf restN l) [(bgraden,[fstN])]:soFar
       where
           bgraden = buurgraadKnoop g fstN

mergeG :: a -> [Int] -> [([Int],[a])] -> [([Int],[a])]
mergeG n ngraden ((gradenL,nodenL):rest)
           | ngraden == gradenL = ((gradenL, sort(nodenL:n)):rest
           | otherwise = mergeG n ngraden rest

解决方案

You forgot to close the parenthesis in ((gradenL, sort(nodenL:n)).

The outher parentheses are redundant anyway, so you could simply write (gradenL, sort $ nodenL : n)

这篇关于Haskell解析错误输入`|'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆