查找字符串中某些子字符串的位置

时间:2014-06-22 07:26:52

标签: haskell

经过一段时间的讨论后,我想出了这个:

import Data.List
substrPos xs str = map (\x -> findIndex (isPrefixOf x) $ tails str) xs

这应该给我一个索引列表,代表str中每个字符串的xs中的第一个外观。

E.g:

Prelude Data.List> substrPos ["Foo", "Bar"] "FooBar"
[Just 0,Just 3]

问题是我怎么能写得更惯用,也许我可以失去lambda? 也许以某种方式(功能组合?)删除封闭isPrefixOf x的parens? 也许用点自由风格写它?

我该如何考虑这些事情?

PS:我可以想出的唯一修改(在第一次编写函数之后)是通过函数应用程序从tails xs中删除parens。

1 个答案:

答案 0 :(得分:4)

您始终可以安装pointfree工具并亲自检查并尝试了解生成的代码。

Pointfree工具给出了以下结果:

map (($ tails str) . findIndex . isPrefixOf) xs

虽然你应该注意到pointfree风格并不总是惯用的。有些人认为这是不可读的pointless