目前我仍然在做这个问题:


  做一个通用的无限序列初始化函数
  创建无限的惰性序列。它将参数作为函数
  从当前值计算下一个值。换句话说,它
  应该是诸如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>类型的对象。阅读herehere中的箭头功能。
考虑如何构造接口的对象。提示:鸭子打字。了解有关此here的信息。
这个问题的最后一点是构造next方法和value属性。请注意,next再次返回类型为LazySequence<T>的对象,其中value应该是序列中的下一个值(这是我假设的部分)。请注意,initSequence(...)(...)可以返回此类对象。


玩得开心 :)

希望这可以帮助。

10-06 00:25