LINUX.ORG.RU

I/O и операции над blob'ами в Scheme.

 , , ,


0

1

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

Проблема в том, что не ясно как эффективно, к примеру, прочитать только последние 100 байт одного файла и, ну скажем, каждый чётный байт другого. На C первое решалось бы fseek'ом а второе просто последовательным чтением одного байта во временный сhar, следующего в инкрементируемый указатель буфера (можно было бы и сразу в буфер а потом всё сдвигать, но пусть stdio решает за нас задачу буферизации), а уж memcmp и бинарные преобразования - это стандартные операции в C.

SICP вообще умалчивает про I/O и файлы в частности, в «Programming in Scheme» (by Michael Eisenberg, Harold Abelson and Julie Sussman), есть инфа о том как работать с файлами через абстракцию портов, но не описан аналог fseek'а и не понятно как работать с произвольными байтами буфера (а так же как вообще создать буфер), хотя эти вопросы мной детально пока не изучены.

Очень полезены были бы _полные_аналоги_ функций fseek/read/write, по-тому, что они делают ровно то, что нужно, а так же, если я правильно понимаю, позволяют работать с файлами размер которых превышает объём оперативной памяти (в том числе её теоритический максимум архитектуры для которой компилируется C-программа), что так же подтверждается астрономическими ограничениями на максимальный размер файла в актуальных файловых системах (и даже некоторых неактуальных).

Было бы здорово узнать как эффективно решать (или хотябы просто решать) такие задачи в Scheme. Живые примеры или ссылки на материалы приветсвуются! Гон на бинарные данные и lisp-подобные языки игнорируется.


Ответ на: комментарий от buddhist

Это не самая приятная задача для Scheme

Тут ещё надо отметить, что в R5RS двоичного ввода/вывода не было, можно было бы использовать read-char, но я не помню, что там гарантировалось относительно кодировок (скорее всего ничего), а аналога fseek там вообще не было.

Begemoth ★★★★★
()

На счёт массивов я пропустил ссылку из lisp-lor-faq, однако для Scheme более развернута эта тема в R6RS 2.2 General operations.

Теперь есть всё что нужно, всем спасибо.

de
() автор топика

C помощью LispWorks PE вы можете решить ВСЕ задачи и проблемы на scheme. /thread

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

Не обращая внимания на то, что это ограниченная версия коммерческой IDE языка lisp, очевидно что телодвижений по решению озвученных задач потребуется примерно столько же, сколько и в scheme'е, но так же представляются очень существенными плюсы превентивного использования неограниченной реализации стройного академического диалекта lisp'a с возможностью переноса результатов труда и опыта в непредвиденные приложения.

Но ведь не просто же так вы это сказали (или анонимусы действительно беспощадны и бессмысленны? :)), в таком случае был бы рад узнать причины такого отношения к LispWorks'у и Scheme'е.

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

в таком случае был бы рад узнать причины такого отношения к LispWorks'у и Scheme'е.

man lor за последние 10 лет. ))

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