2012-02-06 89 views
4

我试图找到以字符串列表中的特定字母开头的单词。用户将输入单词列表和起始字母。例如,像:查找以列表中的给定字母开头的单词

“表铅笔椅子桌子笔”,“P”

使之与p启动的话应该显示,在这种情况下penpencil。我的第一步是使用words函数将字符串拆分为一个字符串列表。那么我怎么才能找到每个单词开头的字母呢?该类型的功能将类似于:

--------------Find words Starting with a given letter------------------ 

findWords :: String -> Char -> [String] 
+0

这功课吗?如果是的话,你应该这样标记它。 – 2012-02-06 12:53:47

+2

这是哈斯克尔工作量很小的任务类书籍的一个例子。现在,试试吧,如果你还需要我们的帮助,请回到这里。但是,如果您不再需要我们的帮助,我不会感到惊讶。 – Jasper 2012-02-06 12:55:25

回答

5

您使用filter

foo string = filter startsWithP (words string) 

,那么你需要定义

startsWithP :: String -> Bool 

更多有用的将是通用的变种

startsWith :: String -> Char -> Bool 

要使用像"foo" `startsWith` 'f'

+0

感谢@dave,有一天我会学习何时需要双反引号,何时不需要。 – 2012-02-06 13:15:04

+0

反引号仅用于中缀形式,在这种情况下使函数调用更像正确的英文(“foo”startsWith'f')。这和调用完全一样:'startsWith“foo”'f'' – shang 2012-02-06 13:38:44

+0

@shang我知道,我指的是使用反引号创建内联代码块的标记。因此,要在内联代码块中使用反引号函数应用程序的反引号,有时他们必须通过编写两个反引号(我认为在评论中让我试试''foo'\'startsWith \''f''),有时显然不。嗯,不,双反引号在评论中也表现为双反引号,一定是误解了逃跑规则。 – 2012-02-06 13:45:02

4

提示1:在Haskell中,String定义为Chars的列表,因此所有列表函数都可用。

1

既然你真的想知道,与给定的字符串开始的字符串(根据您的文章),我会用isPrefixOf功能:

filter ("p" `isPrefixOf`) ["cats", "dogs", "poor boys"] 

功能是作为Data.List模块据我记得。

相关问题