【问题标题】:Merging/Combining a list of Integers with Char [Haskell]将整数列表与 Char [Haskell] 合并/组合
【发布时间】:2012-03-25 21:17:42
【问题描述】:

我想知道如何应用这个功能:

dti xs = (map intToDigit (take 6 (map digitToInt xs))++['/']++map intToDigit(drop 6 (map digitToInt xs)))

在整数列表上,例如; [1234567822,3245336792,...],所以我会得到类似 ["123456/7822","324533/6792",...] 的输出。

重点是在整数列表的每个数字的第 6 位之后添加一个“/”,例如; [1234567822,3245336792,...]。也许有比我更好的方法。

【问题讨论】:

  • 使用splitAt 的解决方案可能比takedrop 的组合更优雅。

标签: list haskell integer char


【解决方案1】:

intToDigit 需要一个数字,因此它会在输入时引发错误,例如 1234567822。

要将Int(或Integer)转换为字符列表,可以使用show,然后将生成的字符串拆分为六位数字

format n = first ++ '/':second
  where
    s = show n
    (first,second) = splitAt 6 s

dti = map format

【讨论】:

  • 我知道像first ++ '/':second 这样的代码是惯用的,但我有时希望成语是first ++ "/" ++ second
  • 我能理解。但是我不能让自己将单个字符包装在一个列表中,然后立即将其再次取出以将其粘贴到另一个列表的前面。这太间接了。
  • @DanielFischer 如果您选择了 Haskell,那么您已经选择不关心计算的间接性。承认你喜欢写你的意思而不是考虑如何计算你的意思。其他任何事情都在为它做编译器的工作; ghc 为main = getContents >>= putStr . ("/"++)main = getContents >>= putStr . ('/':) 的两个程序生成相同的核心(直到alpha 等效)。
  • @DanielWagner 我确实关心间接性,情不自禁;)另外,我没有选择 Haskell,它选择了我。现在它必须承受后果。
猜你喜欢
  • 2015-12-22
  • 1970-01-01
  • 2021-10-21
  • 2022-12-21
  • 1970-01-01
  • 2021-08-28
  • 2020-03-29
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多