目前我仍然在做这个问题:
做一个通用的无限序列初始化函数
创建无限的惰性序列。它将参数作为函数
从当前值计算下一个值。换句话说,它
应该是诸如naturalNumbers之类的函数的“工厂”。因此,如果我们
调用我们的函数initSequence,然后initSequence(n => n + 1)将返回
一个等效于naturalNumbers的函数。
这个模板是给定的
interface LazySequence<T> {
value: T;
next(): LazySequence<T>;
}
// Implement the function:
function initSequence<T>(transform: (value: T) => T): (initialValue: T) => LazySequence<T>
{
// Your code here
}
到目前为止,这是我在TypeScript中的代码
interface LazySequence<T> {
value: T;
next(): LazySequence<T>;
}
// Implement the function:
function initSequence<T>(transform: (value: T) => T): (initialValue: T) => LazySequence<T>
{
// Your code here ...
return () => initSequence(v=>v+1) => LazySequence;
}
而且似乎代码无法正常工作。有人可以帮忙吗?那么有人可以对延迟评估,延迟迭代和其他延迟事物做出清楚的解释吗?
非常感谢
最佳答案
不确定是否需要使用给定的接口,但是似乎需要生成器函数。了解有关此here的信息。
一个示例可以如下所示:
// A generic infinite sequence generator function.
function* infiniteSequence<T>(initialValue: T, transform: (value: T) => T): IterableIterator<T> {
while (true) {
yield initialValue;
initialValue = transform(initialValue);
}
}
// create different sequences using the generic sequence generator function.
let intSequence = infiniteSequence(1, n => n + 1); // sequence of natural numbers
console.log(intSequence.next().value); // 1
console.log(intSequence.next().value); // 2
console.log(intSequence.next().value); // 3
let oddSequence = infiniteSequence(1, n => n + 2); // sequence of odd numbers
console.log(oddSequence.next().value); // 1
console.log(oddSequence.next().value); // 3
console.log(oddSequence.next().value); // 5
let evenSequence = infiniteSequence(0, n => n + 2); // sequence of even numbers
console.log(evenSequence.next().value); // 0
console.log(evenSequence.next().value); // 2
console.log(evenSequence.next().value); // 4
根据OP的评论进行更新:
由于这个问题似乎是一项家庭作业,因此我将尝试提供一些有用的提示。
考虑
initSequence
的返回类型,即(initialValue: T) => LazySequence<T>
,但是您要返回的() => initSequence(v=>v+1) => LazySequence
与所需的返回类型不匹配。换句话说,您需要返回一个具有T
类型的值的函数,并返回一个LazySequence<T>
类型的对象。阅读here和here中的箭头功能。考虑如何构造接口的对象。提示:鸭子打字。了解有关此here的信息。
这个问题的最后一点是构造
next
方法和value
属性。请注意,next
再次返回类型为LazySequence<T>
的对象,其中value
应该是序列中的下一个值(这是我假设的部分)。请注意,initSequence(...)(...)
可以返回此类对象。玩得开心 :)
希望这可以帮助。