我必须找到一些例子,表明内置的Haskell函数"unlines"不是"行"的完全相反,即,
unlines.lines x != x
Run Code Online (Sandbox Code Playgroud)
其中x是包含换行符的String.我找到了一个例子:
"aa\nbb"
Run Code Online (Sandbox Code Playgroud)
会变成
"aa\nbb\n"
Run Code Online (Sandbox Code Playgroud)
有没有人知道任何其他的例子,没有显示相同的缺陷(即,unlines总是在最后一行后添加换行符)?
澄清:根据自动化测试,我已经解决了任务 - 我只是使用了上述三次.如果有任何其他根本不同的解决方案,我只是感兴趣.
如果你使用quickcheck,你可以找到一个较小的:
import Test.QuickCheck
main = quickCheck $ \x -> (unlines . lines) x == x
Run Code Online (Sandbox Code Playgroud)
它会自动缩小反例,因此它通常只报告它找到的最小的一个"a".
我们可以更改属性以仅测试以\n以下结尾的字符串:
import Test.QuickCheck
main = quickCheck $ \x0 -> let x = x0 ++ "\n" in (unlines . lines) x == x
Run Code Online (Sandbox Code Playgroud)
我没有找到任何反例.
您可能也有兴趣测试另一个方向,(lines . unlines).排除其中一个字符串包含换行符的情况,此属性成立.