Haskell:如何在递归函数中使用Maybe类型?
假设我想构造一个函数,将一串字母转换为字符列表 例如,我们输入abc,它将输出Haskell:如何在递归函数中使用Maybe类型?,haskell,recursion,types,Haskell,Recursion,Types,假设我想构造一个函数,将一串字母转换为字符列表 例如,我们输入abc,它将输出[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不在范围
[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]
。有什么问题
我记得在某个地方读到过,字符串只是一个字符列表,
string
和[Char]
一样吗?你使用的Char
类型错误,文字被写入'n'
,'o'
你是对的,
String
只是[Char]
的别名,所以“no”
是['n','o']
的缩写,这与可能
无关。不是。tester
只是代码中的一个字符序列,但它不是一个字符串。您必须对字符使用,
,例如['n','o']
或“no”
。另外,a->…
将始终匹配。你想要'a'->…
。听着,我喜欢越来越多的人进入Haskell,我在这里尽量表现得温和,但也许自学Haskell不应该是你第一次接触编程语言?也许你可以试试一门不错的“编程入门”课程。(我听说了很多关于他们的好消息)最近有一些问题的答案是,“你必须引用你的角色。”我想知道他们是否有关联,以及这些教程或大学课程在哪里引起了混乱。@DanielMartin我理解你的观点,但是我认为把Haskell作为第一语言学习并没有什么错。从命令式编程到纯FP编程,人们通常必须放弃某些习惯(“我如何修改x
?”),而预先学习FP可以让它更简单。@chi,我明白你的意思,但是如果你接近Haskell的时候几乎没有编程经验,以至于引用的文本和变量名之间的区别令人惊讶,那么你不应该试图独自完成这一切。在网上找一门课程或一本书,甚至是一步一步地浏览。不要只是拿起ghci/ghc从零开始。(尽管如此,我仍然认为学习Haskell作为第一种编程语言不是一条路——尽管我听说Racket作为第一种编程语言有很多好处)