Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Haskell
Перезагрузить страницу takeWhile через foldr
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
spy spy вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.01.2012
По умолчанию takeWhile через foldr - 04.01.2012, 12:59

пытаюсь реализовать сабж
haskell Код:
takeWhile' :: (a -> Bool) -> [a] -> [a]
takeWhile' p xs = let (r,_) = foldr step ([], True) xs in r
             where step (acc, True) x | p x = (x : acc, True)
                                      | otherwise = (acc, False)
                   step res _ = res
но натыкаюсь на
Occurs check: cannot construct the infinite type: a = ([a], Bool)
When generalising the type(s) for `myTakeWhile''
в чем может быть причина?
Ответить с цитированием
  (#2 (permalink)) Старый
spy spy вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.01.2012
По умолчанию 04.01.2012, 13:34

перепутал порядок аргументов в функции step...
Ответить с цитированием
  (#3 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 04.01.2012, 14:02

нужно проще:
haskell Код:
takeWhile' :: (a -> Bool) -> [a] -> [a]
takeWhile' p xs = foldr step [] xs
  where
    step x xs | p x = x:xs
    step x xs       = []


Don't fear the Monad
Ответить с цитированием
  (#4 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 04.01.2012, 14:05

и ваш takeWhile' работает для последних n списка, с последнего вхождения элемента, для которого предикат вернет False.


Don't fear the Monad

Последний раз редактировалось calabi-yau; 04.01.2012 в 14:13
Ответить с цитированием
  (#5 (permalink)) Старый
spy spy вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.01.2012
По умолчанию 04.01.2012, 17:09

да, я уже переписал, спасибо
просто постоянно путаюсь с порядком аргументов в foldl' и foldr почему он разный?
вернее я понимаю почему, но это же неудобно
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
5.1 через ресивер к ПК Ali74 Любые вопросы от новичков 26 08.01.2014 00:52
WOL через RT-G32 sizz Любые вопросы от новичков 0 24.10.2011 02:41
Подключение через DVI lost alex Любые вопросы от новичков 9 16.09.2011 11:25
подключить через LAN maxxim89 Любые вопросы от новичков 0 08.07.2011 14:41
включается комп через 5 сек вык через 5 сек опять вкл и так бесконечно Dimaekb Любые вопросы от новичков 10 09.06.2011 15:58
Надо решить уравнение не через InputBox а через For hoolywood Visual Basic 1 12.01.2011 18:36
Интернет через Wi-Fi pasput Сетевые подключения 4 22.03.2009 23:12
Интернет через ADSL или через локальную сеть? НИКОЛАЙ DFKTYNBYJDBX Сетевые подключения 8 21.05.2008 12:57
Кнопка в WML через PHP VBI XML & WML 0 21.05.2006 21:22
Бил Гейтс через 15 лет Dian Юмор 7 30.09.2005 09:05
Декодирование через XOR DmitriyG Visual C++ 3 20.10.2004 15:48



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов