Ошибка синтаксического анализатора Haskell, в где пункт

См. Этот новый блог (16 января 2019 г.), в котором объясняется процесс while:

Кроме того, обратитесь к справочная документация:

5
задан Riccardo T. 24 April 2012 в 14:26
поделиться

2 ответа

Ваше добавление отступа было неправильным, и я думаю, что у Вас может только быть тот where там (я мог быть очень хорошо неправым. Я не haskell парень). Был также аргумент, отсутствующий для вызова к rev (пустой список):

palindrome :: [a] -> [a]
palindrome xs = con xs rs
    where con a b = rev (rev a []) b
          rs = rev xs []                       -- here
          rev [] rs = rs
          rev (x:xs) rs = rev xs (x:rs)

main = print (palindrome "hello")

Распечатывает:

"helloolleh"

Я собираюсь попытаться понять это теперь. Так или иначе, развлекайтесь!

Править: Имеет смысл мне теперь. Я думаю, что это - правильная версия. Для правил добавления отступа Haskell считайте Добавление отступа Haskell

13
ответ дан 18 December 2019 в 14:52
поделиться

@litb: можно переписать довод "против" способом

palindrome :: [a] -> [a]
palindrome xs = con xs rs
    where con [] b = b
          con (x:xs) b = x:con xs b
          rs = rev xs []                       -- here
          rev [] rs = rs
          rev (x:xs) rs = rev xs (x:rs)

который является, как ++ реализован во вводной части. Моя предыдущая версия является путем, как записать это в не ленивые функциональные или логические языки способом последнего вызова (например, Erlang).

0
ответ дан 18 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: