【问题标题】:haskell: change lowercases to capitals in a list of strings [duplicate]haskell:在字符串列表中将小写更改为大写[重复]
【发布时间】:2015-07-15 01:26:50
【问题描述】:

我的问题是,我想将列表["hello","wHatS", "up?"] 的每个小写字母都改为大写。

map toUpper [x] 真的不行……

它应该返回 ["HELLO", "WHATS", "UP?"]..

【问题讨论】:

  • toUpperChar -> Char,你有[[Char]],你需要映射两次。
  • map map toUpper [list] ?
  • 几乎 ;) map (map toUpper) yourList.
  • arggghh 那些括号哈哈哈,谢谢
  • 某人(@Mark ?)应该把它变成一个答案,这样我们就可以结束这个问题;)

标签: string list haskell


【解决方案1】:

看看toUpper的类型,它是Char -> Char,但你有[[Char]]。也就是说这里有两层list functor,所以要映射两次。

出于教学原因,我们可以在这里使用map,如下所示:

map (map toUpper) yourList

括号在这里很重要,我们给map :: (a -> b) -> [a] -> [b] 一个参数并得到另一个[Char] -> [Char] 类型的函数(正是我们需要的!)因为curring。

了解函子后,您可能更喜欢 fmap<$> 来完成此任务:

(toUpper <$>) <$> yourList

【讨论】:

  • 顺便说一句:我不认为doulbe &lt;$&gt; 更可取-尽管map toUpper &lt;$&gt; yourList 可能是一个选项,如果考虑到可读性;)
  • fmapthen。我不认为 map 在现代 Haskell 中使用。似乎haskellers 更喜欢强大的抽象,如函子、单子、可遍历、可折叠等。fmap 更抽象,因为我们可以用它映射任何函子,而不仅仅是列表。
  • 我认为在这种情况下,抽象并不是真正需要的——如果你开始和这样的初学者交谈,Haskell 很快就会成为一种死语言;)
猜你喜欢
  • 2021-03-30
  • 2014-02-04
  • 1970-01-01
  • 2014-04-20
  • 2012-01-03
  • 2011-01-07
  • 2020-09-16
  • 2019-07-20
  • 2011-10-06
相关资源
最近更新 更多