Я хочу создать функцию в haskell, которая возвращает количество раз, когда одно слово является префиксом списка слов. Например: для слова «идти» и списка слов «туз», «идти», «уходить», «гольф»] он должен вернуться 3. Что у меня есть до сих пор:как я могу считать префиксы в haskell?
numberOfPrefixes _ [] = error ("Empty list of strings")
numberOfPrefixes [] _ = error ("No word")
numberOfPrefixes (x:xs) (y:ys)
| isPrefixOf (x:xs) y = 1 + numberOfPrefixes(x:xs) ys
| otherwise = 0
Но это работает только в том случае, если первый элемент списка слов на самом деле является префиксом. Если первый элемент не является префиксом, все это разваливается. Любая помощь делает это правильно?
isPrefixOf :: (Eq a) => [a] -> [a] -> Bool
isPrefixOf [] _ = True
isPrefixOf _ [] = False
isPrefixOf (x:xs) (y:ys) = x == y && isPrefixOf xs ys
Привет, я знаю, что вы новичок в SO, но если у вас есть вопрос по моему ответу, отправьте его как комментарий к моему ответу, чтобы я его увидел :) Во-вторых, исправьте вы отступы и измените 'y: ys' на просто' y' в чеке, и он отлично работает – jozefg
Итак, у меня есть еще один вопрос. Любая помощь ? И спасибо за ваш совет, было очень полезно –
Опубликовать это как отдельный вопрос, и я буду рад. – jozefg