У меня есть список значений, которые я бы хотел взять, пока значение увеличивается. Я предполагаю, что он всегда будет возглавлять список, а затем сравнить его со следующим значением. Функция будет продолжаться до тех пор, пока она продолжает увеличиваться. По достижении элемента списка, который меньше или равен первому значению, возвращается список.Возьмите из списка при увеличении
takeIncreasing :: (Ord a) => [a] -> [a]
takeIncreasing [1,2,3,4,3,5,6,7,8] -- Should return [1,2,3,4]
Откидна мог сравнить last
элемент накопления со следующим значением и добавить, если условие выполняется, но будет продолжаться до конца списка. Я хотел бы, чтобы функция прекратила принимать в первом случае ограничение не выполнялось.
Это похоже на приложение монады, но не может определить, выполняет ли существующая монада это.
Nitpick: правая складка может короткое замыкание ** в лениво оцененном языке **, как Haskell. Но это, конечно, очень важный момент, чтобы знать! Многие люди, которые приезжают в Хаскелл, имеют опыт работы с нетерпением оцененными языками, где правильные складки часто избегают, потому что они (а) продолжаются до конца списка и (б) удаляют стек в длинных списках. Но «складка» Haskell может быть и часто используется способами, которые не имеют этой проблемы, и на самом деле, в Haskell 'foldl' - это тот, который чаще всего рискует выдувать стек! –