Смотрите на спецификация PNG. Этот формат имеет некоторое очень хорошее объяснение позади него.
кроме того, решите то, что важно для Вашего будущего формата: компактность, совместимость, позволяя встраивать другие форматы (различные алгоритмы сжатия) в нем. Другой интересный пример был бы буферы протокола Google , где размер переданных данных является королем.
Что касается порядка байтов, я предложил бы, чтобы Вы выбрали одну опцию и придерживались его, не позволяя различные заказы байта. Иначе чтение и запись библиотек только станут более сложными и медленнее.
Не уверен, что вы хотите, но чтобы создать список всех целых чисел от X до Y (включительно), вы мог бы сделать:
local
fun {Loop From To}
if From > To
then nil
else From | {Loop From+1 To}
end
end
in
{Browse {Loop 0 10}} % Displays: [0,1,2,3,4,5,6,7,8,9,10]
end
Также причина, по которой вы не получаете никакого окна браузера, заключается в том, что поток оценки приостанавливается из-за этой строки:
Xs={List.append Xs I}
Как уже упоминалось ранее, переменная может быть назначена только один раз, но есть еще кое-что, что не так с этой строкой.
Вы пытаетесь добавить Xs
к I, но Xs
все еще не связана. Таким образом, поток приостанавливает свою работу до тех пор, пока не будет присвоено значение Xs
.
Введите это в интерактивном режиме:
declare Xs in
{Browse {List.append Xs [2 3 4]}}
Так как вы видите, что ничего не происходит, браузер не открывается. Теперь введите следующее:
Xs= [1]
Поскольку Xs
становится связанным, он разблокирует первый оценочный "поток", и откроется браузер.
P.S. Извините за поздний ответ, меня только что заинтересовал Оз :P
.