【问题标题】:String and add special characters from a list in Haskell字符串并从 Haskell 的列表中添加特殊字符
【发布时间】:2015-04-10 19:34:28
【问题描述】:

在 Haskell 中,我曾经使用过滤器从列表中删除一组数字。但是,我无法使其适用于这种特殊情况。

我有一个字符串列表如下:

["A","B","C","D","E","F","A","B","N"]

我想将[]"" 串起来,所以最后的字符串是(带空格):

A B C D E F A B N

不应该像print filter([) ["A","B","C","D","E","F","A","B","N"] 这样的简单过滤器删除[ 吗?

更新:

我阅读了this document 并且能够得到以下结果:

let example = (concat (intersperse " " ["A","B","C","D","E","F","A","B","N"]))
print example
-- this prints "A B C D E F A B N"

但是,当我使用这个时:

-- where createalphs create a list of strings
-- and userinput is a string entered by the user 

let setofalph = ($ createalphs $ words userinput)
let example = (concat (intersperse " " setofalph))
print example

我收到这个错误

Couldn't match expected type `[[Char]]'
In the second argument of `intersperse', namely `setofalph'
In the first argument of `concat', namely
  `(intersperse " " setofalph)'
In the expression: (concat (intersperse " " setofalph))

【问题讨论】:

  • ["A","B","C","D","E","F","A","B","N"] 是您的字符串,即"["A","B","C","D","E","F","A","B","N"]",还是字符串列表?你很不清楚。
  • @gspr 抱歉,这是一个字符串列表
  • 对,那么“剥离 []”就没有意义了!这只是列表的符号。相反,您是否想将字符串列表转换为所有元素以逗号分隔的字符串?
  • 你的setofalph 需要一个函数调用它像这样let example = setofalph unwords,你可能想要let setofalph = createalphs $ words userinput 而不是let setofalph = ($ createalphs $ words userinput)

标签: string list haskell


【解决方案1】:

unwords 工作正常:

λ> unwords ["A","B","C","D","E","F","A","B","N"]
"A B C D E F A B N"

此外,Data.List.intersperseconcat 也会有所帮助。

import Data.List

solution :: [String] -> String
solution =  concat . intersperse " "

这样做是用" " 分隔列表中的每个值,然后将列表连接(连接)在一起。

如果你想和", "分开,你可以很容易地改变上面的函数:

solution :: [String] -> String
solution =  concat . intersperse ", "

这样:

λ> solution ["A","B","C","D","E","F","A","B","N"]
"A, B, C, D, E, F, A, B, N"
λ> putStrLn $ solution ["A","B","C","D","E","F","A","B","N"]
A, B, C, D, E, F, A, B, N

将其放入 IO 的上下文中:

main = do
  x <- getLine
  putStrLn $ solution $ createalphs $ words x

【讨论】:

  • 问题是我从用户那里得到一个字符串并将它传递给一个函数。例如print $ createalphs $ words userinput 将打印["A","B","C","D","E","F","A","B","N"]。现在我想删除""[]
  • @RainMan 我已经做到了。为了更清楚,我在最后添加了 IO 功能。
  • 太好了,谢谢。一个简单的问题,是否可以像 let example = ($solution $ createalphs $ words x) putStrLn = "String is" ++ example 一样拥有它?这样做时出现错误
  • 为什么是第一个$?你知道那个函数是做什么的吗?如果没有,我建议您看一些介绍性材料(抱歉,没有链接,在电话上)。
  • 请注意:concat . intersperse x == intercalate x
猜你喜欢
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
相关资源
最近更新 更多