Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Учу Haskell и мне нужна маааленькая помощь 
:(
    Опции темы
afiskon
Дата 30.5.2011, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4



Сразу скажу, что вопрос ламерский и из серии "помогите найти ошибку". Вот мой код:
Код

import Network.Curl.Download
import Text.Regex.PCRE
import System

-- преобразование ссылки на видео в ссылку на XML
urlToXmlUrl :: String -> String -- TODO: Maybe String ?
urlToXmlUrl url =
  let regex = "^(?:http://)?rutube\\.ru/.*?[\\?&]{1}v=([a-f\\d]{32})"
      match = url =~ regex :: [[String]]
  in case match of
    [] -> ""
    [[_, hash]] -> "http://bl.rutube.ru/" ++ hash ++ ".xml"  

-- проверяем количество аргументов и выводим usage если
-- число аргументов неверно
parseArgs :: [String] -> IO ()
parseArgs (url:outFile:xs) = do
  putStrLn $ "Url = " ++ url

  let xmlUrl = urlToXmlUrl url in
    putStrLn $ "XmlUrl = "  ++ xmlUrl
--    xmlData <- openURI xmlUrl
--    putStrLn $ "xmlData = " ++ xmlData
--    putStrLn $ "length(xmlData) " ++ ( length xmlData )

--  rtmpUrl <- xmlUrlToRtmlUrl xmlUrl
--  putStrLn $ "RtmpUrl = " ++ rtmpUrl

parseArgs _ = do
  progName <- getProgName
  putStrLn $ "Usage: " ++ progName ++ " <url> <outfile>"
  exitWith $ ExitFailure 1

main = do
  args <- getArgs
  parseArgs args


Мне не ясно две вещи. Первая - как указать флаг /i в регулярном выражении? Вторая - что написать в parseArgs, чтобы определить xmlUrl = urlToXmlUrl url (я ведь могу вызвать чистую функцию из монады, чтобы она считалась "лениво"?), затем скачать данные (xmlData <- openURI xmlUrl), потом вывести результат, потом подать его на вход какой-то другой функции. Не до конца я видимо с синтаксисом разобрался.

Заранее спасибо.
PM MAIL WWW   Вверх
afiskon
Дата 31.5.2011, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4



Кажется, допер
Код

test =
  let message = "Hello, world!\n" in do
    putStrLn message

main = do
  test


А флаги в регулярных выражениях, кажется, ставятся так:
Код

Regex "....." flags e

PM MAIL WWW   Вверх
Void
Дата 31.5.2011, 12:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 1
Всего: 173



let внутри do-нотации использовать очень просто. Собственно, вся do-нотация сводится к паре рекурсивных правил, одно из которых:
Код

do                          let x = y in
    let x = y       =>      do
    z                           z

С регулярками, к сожалению, так сразу помочь не могу, в Text.Regex.Base типы несколько наворочены.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума «Функциональные языки: общие вопросы»
Void
  • Пожалуйста, создавайте темы с содержательными названиями. Если у Вас вопрос по конкретному языку, укажите его в заголовке, например: «[Haskell] Как использовать монаду State».
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.