问题描述
我已经实现了一个惰性无限序列函数以及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")
以便保留奇数,甚至取反。