Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 跳过不包含新行的空格_Haskell_Attoparsec - Fatal编程技术网

Haskell 跳过不包含新行的空格

Haskell 跳过不包含新行的空格,haskell,attoparsec,Haskell,Attoparsec,提供函数 此函数使用所有可用的空白 如何实现跳过除\n和\r\n之外的任何空白的函数skipSpaceNoNewline 注意:此问题故意不显示任何研究成果,因为它是问答式回答。您可以组合和(与\n和\r\n匹配) 使用lambda函数,可以将它们组合成一个跳过除换行符以外的任何空白的skipWhile谓词 skipSpaceNoNewline = skipWhile (\x -> isSpace_w8 x && not (isEndOfLine x)) 为什么不直接使用

提供函数

此函数使用所有可用的空白

如何实现跳过除
\n
\r\n
之外的任何空白的函数
skipSpaceNoNewline

注意:此问题故意不显示任何研究成果,因为它是问答式回答。

您可以组合和(与
\n
\r\n
匹配)

使用lambda函数,可以将它们组合成一个跳过除换行符以外的任何空白的
skipWhile
谓词

skipSpaceNoNewline = skipWhile (\x -> isSpace_w8 x && not (isEndOfLine x))

为什么不直接使用
skippacentowline=filter(而不是.isSpace)

编辑:我错了。空间是无用的。我以为
isSpace'\n'
False
,但它是
True
。直接查看空间即可:

[ghci] putStrLn $ filter (/=' ') $ ";df g; lkdfg\n l sd;lfk sdf"
;dfg;lkdfg
lsd;lfksdf
或者确保过滤正确的内容:

[ghci] putStrLn $ filter (\m-> m `notElem` "\t\f\v") $ ";df g; lk\vdfg\n l sd;lfk sdf"
;df g; lkdfg
 l sd;lfk sdf
因此,您的函数变成:

skipSpaceNtoNewLine = filter  (\m-> m `notElem` "\t\f\v") 

很抱歉搞混了。

我想你误解了这个问题。这并不是关于跳过字符串中的空格,而是在attoparsec中。您提供了签名
String->String
的解决方案,但需要的是
解析器()
,除此之外,我认为您的算法很慢(列表中的元素,您通常应该使用集合或手写检查),但最重要的是,它可能是不正确的,因为据我所知,空格字符类包含的内容超过了
“\t\f\v”
,尤其是unicode。