2016-04-18 2 views
-2

Предположим, я хочу построить функцию, которая превращает строку букв в список символов.Haskell: Как использовать тип Maybe в рекурсивных функциях?

Пример может быть, мы ввод а и было бы выход [a,b,c]

Я построил функцию:

tester:: String-> [Char] 
tester []= [] 
tester (x:xs)= case x of 
    a -> a: (tester xs) 
    b -> b: (tester xs) 
    c -> c: (tester xs) 
    otherwise -> [n,o] 

Haskell дает ошибку, которые n и o не в области. но n и o оба Шарса не так ли? Следовательно, [n,o] - это номер [Char], соответствующий типу выхода. В чем проблема?

Я помню, где-то читал, что строка - это всего лишь список Char s, также как и String так же, как [Char]?

+1

Это не имеет никакого отношения к 'Maybe'. И нет. 'tester' - это просто последовательность символов в вашем коде, но это не' String'. Вы должны использовать '' 'для символов, например. '['n', 'o']' или '" no "'. Также 'a -> ...' всегда будет соответствовать. Вы хотите '' a '-> ... '. – Zeta

+2

Послушайте, мне нравится, что больше людей попадает в Haskell, и я стараюсь быть здесь нежным, но, возможно, изучение Haskell по своему усмотрению не должно быть вашим первым знакомством с языком программирования? Возможно, вы могли бы попробовать хороший «вводный курс программирования» Курсера. (Я слышал о них большие вещи) –

+0

В последнее время было несколько вопросов, на которых был ответ: «Вы должны процитировать своих персонажей». Интересно, связаны ли они и где эти учебные пособия или курсы колледжа вызывают путаницу. –

ответ

1

Вы используете неправильный тип Char, литералы написаны 'n', 'o'.

Вы правы, что String это просто псевдоним для [Char], так "no" это аббревиатура для ['n','o'].

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