2015-05-05 221 views
1

我的问题是,我想将列表["hello","wHatS", "up?"]的每个小写字母更改为大写字母。haskell:将小写字母更改为字符串列表中的大写字母

map toUpper [x]不会真的工作...

它应该返回[ “HELLO”, “什么”, “UP?”] ..

+1

'toUpper'是'字符 - > Char',你'[[字符]',你需要地图两次。 – Mark

+0

map map toUpper [list]? – satubus

+2

几乎;)'地图(映射toUpper)yourList'。 – Mark

回答

6

在类型toUpper看看,这是Char -> Char,但你有[[Char]]。这意味着你在这里有两层列表仿函数,所以你应该映射两次。

出于教学的原因,我们可以在这里使用map,像这样:

map (map toUpper) yourList 

括号中的重要位置,我们给出一个参数map :: (a -> b) -> [a] -> [b],并得到[Char] -> [Char]型(这正是我们所需要的!),因为另一个功能curring。

一旦你了解仿函数,你可能更喜欢fmap<$>这个任务:

(toUpper <$>) <$> yourList 
+3

btw:我不认为doulbe'<$>'是更可取的 - 尽管'map toUpper <$>如果可读性受限,yourList'可能是一个选项;) – Carsten

+1

'fmap'then。我不认为现代Haskell中使用“map”。 Haskellers似乎更喜欢强大的抽象,比如函数,单子,可遍历,可折叠等。'fmap'更抽象,因为我们可以映射任何函子,而不仅仅是列表。 – Mark

+7

我认为在这种情况下,抽象并不是真的需要 - 如果你开始与像这样的初学者交谈,Haskell很快就会成为一种死语;) – Carsten

相关问题