这个成语是否有名称根据之前的值和结果计算新结果?

问题描述 投票:0回答:1

这个“Deriver”成语是否有标准名称(用Typescript编写,但不是Typescript特定的):

type Derivation<T, R> = { value: T, result: R };
type Deriver<T, R> = (
    previous: Derivation<T, R> | undefined,
    value: T
) => R;

其中deriver是一个函数,使用前一个值/结果计算新值R作为暗示可能优化新计算?

以下是此类功能的示例:

function complexCalculation(a: number, b: number): number {
    // assume that this function is expensive
    return a + b;
}

function calcDeriver(
    previous: Derivation<number[], number> | undefined,
    value: number[]
): number {
    if (previous) {
        if (previous.value === value) {
            return previous.result;
        }
        let samePrefix = true;
        if (previous.value.length < value.length) {
            for (let i = 0; i < previous.value.length; i++) {
                if (previous.value[i] !== value[i]) {
                    samePrefix = false;
                    break;
                }
            }
        }
        if (samePrefix) {
            return value
                .slice(previous.value.length)
                .reduce(complexCalculation, previous.result);
        }
    }

    return value.reduce(complexCalculation, 0);
}
typescript functional-programming
1个回答
1
投票

我的第一个想法是这是一种Memoization形式,只有一个记忆结果。但是,如果是这种情况,如果找到previous.result,你只需返回samePrefix

相反,它看起来像你正在做的是创建一种Reduce / Fold功能,能够从以前的状态中提取它。

这种模式有许多不同的名称,因此您可以根据自己的需要确定最适合您的模式。以下是一些建议:

  • Reduction / Reducer
  • FoldResult / Folder
  • Aggregation / Aggregator
© www.soinside.com 2019 - 2024. All rights reserved.