Re[14]: Сильные стороны функционального программирования
От: Gaperton http://gaperton.livejournal.com
Дата: 01.09.04 12:42
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>>Yield всего лишь облегчает реализацию итераторов, которые и в императивном случае вполне ленивы.

G>>Итераторы были-бы ленивыми, если бы значение элемента контейнера вычислялось в момент доступа к нему по итератору, т. е. было отложенным до момента чтения.
S>Это так и есть. Не очень понимаю, зачем итератору вычислять элементы в какой-то другой момент.
Не совсем так. Допустим, у тебя одна функция заполняет вектор значений, нетривиально вычисляя каждое значение.

И вот ты хочешь пробежаться по нему итератором. В "ленивой" реализации у тебя по крайней мере "ленивые" конструкторы элементов массива, так что элементы не будут на самом деле вычислены, пока ты не обратишься к ним через итератор. Вычисление будет отложено до момента чтения, который может вообще не случиться. Понимаешь разницу? Это позволяет тебе определять бесконечные (или ну очень большие) структуры данных, например.

В строгой реализации все элементы контейнера будут вычислены сразу, а итератор — ну это просто итератор. Он никакой, ни ленивый, ни строгий. Это просто акцессор, интерфейс, способ доступа. А вот контейнер — строгий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.