2014-04-23 2 views
0

Я пытаюсь скомпилировать эту функцию:Haskell Ошибка синтаксического анализа в определении функции

fff [] _ = [] 
fff (x:xs) ys 
    | r == [] = xs1 
    | otherwise ys ++ xs1 
    where r = filter (x<) ys 
     xs1 = fff xs ys 

Но я получаю эту ошибку:

Test.hs:14:4: parse error on input `where'

Failed, modules loaded: none.

Любая помощь, чтобы решить эту проблему?

Thanks,
Sebastián.

ответ

2

Вы пропустили необходимый = после otherwise.

Кстати, r == [] лучше заменить на более общий null r.

Попробуйте это:

fff [] _ = [] 
fff (x:xs) ys 
    | r == [] = xs1 
    | otherwise = ys ++ xs1 
    where r = filter (x<) ys 
      xs1 = fff xs ys 
+0

Лучше причина использовать 'null' над' == [] ', потому что' == [] 'требует, чтобы ваш список будет типа' уравнение а => [а ] ', где' null :: [a] -> Bool', поэтому 'null' работает в _all_ списках, а не только в списках значений' Eq a => a'. – bheklilr

+0

@bheklilr Спасибо. Обновлен Анасер. –

Смежные вопросы