Нужна программа на 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-подобные языки игнорируется.