2013-11-13 2 views
0

я имею в виду: ввода: суффиксы [ "Hello"] Вывод: [ 'ELLO', 'LLO', 'вот', 'о'] или что-то .. Начало является:Выдают суффиксы (Haskell)

> suffixes :: [a] -> [[a]] 
> suffixes [] = [] 

Я думаю, что это немного похоже на

> drop (n+1) (x:xs) = drop n xs 
> drop _ xs = xs 

Но здесь я хочу опустить всегда первый элемент списка «выжившего». Как начать? Возможно,

> suffixes as = [as!!2:xs] 

или аналогичный?

ответ

5

tails от Data.List будет делать то, что вы хотите.

tails "hello" 
--["hello", "ello", "llo", "lo", "o", ""]-- 

Похоже, вы не хотите, первый элемент, так что вы можете drop 1.

+0

Спасибо. И как сделать то же самое, но с префиксами? – haskellnoob

+1

'Data.List.inits'' inits "Hello" -> ["", "H", "He", "Hel", "Hell", "Hello"] ' –

4

Data.List.tails может быть использован, чтобы получить список всех суффиксов другого списка, и вы можете использовать drop 1 уронить первый элемент списка вывода:

import Data.List 
suffixes = drop 1 . tails 

Если вы хотите префиксы вы можете использовать Data.List.inits , Обратите внимание, что возвращает префиксы в порядке возрастания или длины, а tails возвращает суффиксы в порядке убывания длины.

+0

Спасибо. И как сделать то же самое, но с префиксами? (Когда единственным элементом, который я хочу, является первым) – haskellnoob

+0

@haskellnoob - вы можете использовать 'Data.List.inits' для получения префиксов – Lee

Смежные вопросы