LINUX.ORG.RU

Haskell: конструктор списка


0

0

Есть бинарный файл, нужно выбирать из него 16-битные отсчёты с
определённого места (nBg - номер отсчёта в файле) и количеством-nSm.
Результат - список типа [Word16] (или [Int16]) размером nSm.

Вот последовательность действий над одним отсчётом (2-4):

1 main = do ff  <- decodeFile "Data.dat" :: IO [Word16]
2           let x1 = putWord16le (ff !! 10)
3               x2 = runPut x1
4               x3 = decode x2 :: Word16
5           printf "0x%x\n" x3

Здесь получаю 1 отсчёт. Нужно написать ф-цию, которая формирует
список из этих отсчётов, описанный выше. 
Примерная типизация:
getRecData :: IO a -> Integer -> Integer -> [a]
getRecData x nBg nSm

Здесь, x - значение возвращённое decodeFile (1 строка - ff, например)
nBg - номер позиции первого 16-битного отсчёта;
nSm - всего отсчётов;
[a] - результат, список отсчётов.
Использую a (IO a, [a]), т.к. может быть и Word8, Word16, Word32...
Ответ на: комментарий от jtootf

ФП много и в CL (пишу под ним), а мозг извратить для чистого ФП просто не всегда получается пока, императивщина так и прёт (. Так что мимо кассы )

brahman
() автор топика
Ответ на: комментарий от jtootf

>> именно как механизм реализации алгоритмов их и следует рассматривать. ну и как механизм проектирования (я бы сказал инкапсуляции) и автодокументирования кода (по типу функции всегда можно сказать - выполняет ли она IO, работает ли с состоянием, бросает ли исключения)

Замечу - по типу, а не по _do_. В монадах, все о чем ты пишешь есть и без do. Монадические операции интересны сами по себе как абстракции процессов без необходимости вникать в то, что происходит за занавеской. И do здесь хотя иногда и полезно, но в большинстве смотрится неадекватно на уровне абстракции предлагаемом монадами (как синтаксис ессно).

>> do - это синтаксический сахад для работы с монадами. а монады, как было указано выше, используются не только (и не столько) для императивщины. хотя да, как показывает пример данного треда, do-нотация может быть трактована идиотически :(

Вот я о чем и говорю, основная цель do, имхо, привлекать новичков к функциональщине, других не проглядывается.

cathode
()
Ответ на: комментарий от jtootf

>> если ты не умеешь писать программы в функциональном стиле - зачем ты пишешь на Haskell ?

Чтобы уметь, надо сначала научиться. Не согласен? Вот человек и учится.

cathode
()
Ответ на: комментарий от cathode

>Чтобы уметь, надо сначала научиться. Не согласен? Вот человек и учится.

согласен. это я чушь написал, конечно

jtootf ★★★★★
()
Ответ на: комментарий от cathode

>Вот я о чем и говорю, основная цель do, имхо, привлекать новичков к функциональщине, других не проглядывается.

жестокий ты человек. последнего сахара лишаешь :)

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

>> жестокий ты человек. последнего сахара лишаешь :)

Для сохранения status quo хорошо бы сказать что-то про кариес и диабет, но на ум кроме водки и пельменей больше ничего не приходит :)))

cathode
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.