如何通过更改序列中的每个备用值来懒惰地评估序列?

问题描述

我已经实现了一个惰性无限序列函数以及3个称为take,reduce,map的函数。 take函数类似于Haskell的实现,在Haskell的实现中,它从给定有限值的无限序列中抽取有限序列,并使用可在有限序列类型中使用的Java语言中通常的reduce和map函数。

现在,我正在尝试对序列值应用各种条件来评估序列中的值。

我坚持执行带有数字项的函数,并计算序列总积和总和,并且每个交替的序列值符号都变为负号。这是我为该目标实现的功能:

function alternatingProduct(term) {
    return reduce((x,y) => x * y,take(term,map(x => -x,generateSequence((v) => (v + 1))(1))),1);
}

该函数应该如何工作,它会延迟地接收序列,并将每个备用值符号从正更改为负。因此,例如,当生成1到3的序列时,序列中的2应该为负,从而给出整个有限序列的总积为-6。

最初,我以为我的代码在我调用时有效

alternatingProduct(4) 

//where it returns 24.

alternatingProduct(3)

//where it returns -6. 

当我尝试实现类似的函数求和时,那才是我意识到我的函数是错误的。

function alternatingSum(term) {
    return reduce((x,y) => x + y,0);
}

alternatingSum(3)
//should return 2 because of 1+(-2)+3  but it returned 5 instead 

alternatingSum(4)
//should return -2 because of 1+(-2)+3+(-4) but it returned -9 instead

现在,我意识到我的功能映射会更改序列中的每个值。我不知道如何更改代码以仅更改惰性序列的交替值。我是懒惰序列和评估的新手,只是尝试一下,感谢您的帮助

解决方法

您可以使用

# result
world %>%
  ggplot() +
  geom_map(map = world,aes(x = long,y = lat,map_id = region)) +
  geom_polygon(data = plates2,aes(x = lon,group = group),fill = NA,colour = "dark green")

以便保留奇数,甚至取反。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...