Показать сообщение отдельно
  #15 (permalink)  
Старый 25.03.2019, 09:48
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

ОК, я такого, что вы тут написали даже и не запускал! В №9 чуть другой пример!

Вычисление range(1, Infinity) |> take.bind(null, 5) |> sum |> alert без итератора (Осторожность! Бесконечный цикл!)
function range(start, end) {
	let array = []; 
	for (var i = start; i <= end; i++)
		array.push(i);

	return array;
} 

function sum(array) {
	let total = 0;
	for(const value of array)
		total += value;

	return total;
}

function* take(n, xs) {
	for(const x of xs) {
		if(n-- <= 0)
			break;

		yield x;
	}
}

alert(sum(take(5, range(1, Infinity))));


Вычисление range(1, Infinity) |> take.bind(null, 5) |> sum |> alert с итератором (Запускайте смело!)
function* range(start, end) {
	for (let i = start; i <= end; i++)
		yield i;
}

function sum(array) {
	let total = 0;
	for(const value of array)
		total += value;

	return total;
}

function* take(n, xs) {
	for(const x of xs) {
		if(n-- <= 0)
			break;

		yield x;
	}
}

alert(sum(take(5, range(1, Infinity))));
Ответить с цитированием