嗨,我是Haskell的新手和功能编程..
我想传入字符串并找到以“ed”或“ing”结尾的单词。
eg: if the string is "he is playing and he played well"
answer should be : playing, played
有没有人知道如何使用Haskell做到这一点。
答案 0 :(得分:3)
您可以使用标准Haskell函数构建它。首先导入Data.List:
import Data.List
使用isSuffixOf
确定一个列表是否以另一个列表结尾。 endings
下方["ed","ing"]
可能是w
,"played"
就是您正在测试的字词,例如hasEnding endings w = any (`isSuffixOf` w) endings
。
ws
假设您已将字符串拆分为单个字词列表(下面为filter
),请使用wordsWithEndings endings ws = filter (hasEnding endings) ws
删除您不想要的字词:
words
使用intercalculate
获取原始字符串中的单词列表。使用.
将过滤后的单词重新加入到最后一个以逗号分隔的字符串中(如果您希望将结果作为单词列表,请将其关闭)。使用wordsEndingEdOrIng ws = intercalate ", " . wordsWithEndings ["ed","ing"] . words $ ws
将这些功能链接在一起。
wordsEndingEdOrIng "he is playing and he played well"
你已经完成了。
let
如果您输入ghci,请将{{1}}放在每个函数定义的前面(除了最后一行之外的所有行)。
答案 1 :(得分:0)
contain w end = take (length end) (reverse w) == reverse end
findAll ends txt = filter (\w -> any (contain w) ends) (words txt)
main = getLine >>= print . findAll ["ing","ed"]
findAll :: [String] - >字符串 - > [字符串]
findAll ::“endings” - > “你的文字” - > “正确的话”