[haskell]Хвостик списка

apl13

Кто-нибудь может рассказать, как на хаскеле написать функцию, обрубающую, скажем, пробелы, которыми кончается строка?
Чтобы
couper "Some spaces at the tail        " => "Some spaces at the tail"

6yrop

хороший видать язык, если выпускник мехмата, такие вопросы задает

ppplva

Как-то так. Наверное, можно еще элегантнее, но пока ничего в голову не приходит.
rstrip [x] = if x == ' ' then "" else [x]
rstrip (x:xs) = let xss = rstrip xs in
if null xss then rstrip [x] else x:xss

ppplva

Да, язык не для php-хуяторов.

apl13

Жесть! А функция возвращающая True, если строка состоит из двух одинаковых подстрок, и False иначе
(isDbl "Abraka Abraka " => True, isDbl "Abrakadabra" => False)?

apl13

Бывают прикольней.

ppplva

Двух одинаковых подстрок, разделенных пробелом ? Вроде несложно, отсчитай до середины, распили и сравни.

apl13

Нет, просто подстрок.
В общем, м-да...
Печально все это. Больно уж строгие правила для образцов.

Papazyan

Жесть! А функция возвращающая True, если строка состоит из двух одинаковых подстрок, и False иначе
Такое надо писать на APL: v\y=(py%2)Фy:x,' '

Papazyan

Как-то так. Наверное, можно еще элегантнее, но пока ничего в голову не приходит.
Лучше все-таки переворачивать. Для небольших списков реверс быстрый.

rsstrip = reverse . strip_ws . reverse
where strip_ws ' ':t = strip_ws t
strip_ws str = str

Landstreicher

Зачем так сложно?
Достаточно

rstrip = reverse . (dropWhile (== ' ' . reverse

IMHO так гораздо понятнее, что функция делает.

apl13

Я еще придумал cut s | ' ' <- last s = cut (init s) , хотя с точки зрения перформанса...
Оставить комментарий
Имя или ник:
Комментарий: