List 使用map函数时如何访问下一个元素?

List 使用map函数时如何访问下一个元素?,list,haskell,map-function,List,Haskell,Map Function,我试图对haskell中列表的每个元素应用一个函数。因此,我正在使用map功能。 我的代码应该将下一个元素的值添加到当前元素中 所以我认为我的代码应该是这样的: test :: [Rational] test = map (\x -> x % {-somehow get next element -}) listT listT是Int类型的无限列表 但我如何“访问”下一个值? Thx为您提供帮助要访问下一个元素,请映射到: 因为当没有下一个元素时,您的op无法应用,尽管它只会发生在有限的

我试图对haskell中列表的每个元素应用一个函数。因此,我正在使用
map
功能。 我的代码应该将下一个元素的值添加到当前元素中

所以我认为我的代码应该是这样的:

test :: [Rational]
test = map (\x -> x % {-somehow get next element -}) listT
listT
是Int类型的无限列表

但我如何“访问”下一个值?
Thx为您提供帮助

要访问下一个元素,请映射到:

因为当没有下一个元素时,您的
op
无法应用,尽管它只会发生在有限的列表中。您可能知道输入列表是无限的,但是您的类型不是无限的,所以最好是安全的

您可能希望添加一个后处理步骤,以除去最后的
Nothing
,并提取
Just
值。似乎是适用的

当然,在这里使用注释中提到的
zipWith
(*)更简洁、更切题;但这种带有
尾部的方式通常更通用,即更容易修改以用于三元
op
等。。使用
zipWith
我们必须使用一系列嵌套的
zipWith
应用程序,并构建人工元组来访问元素;有了
tails
我们根本不需要做这样的事情

map
(通常为
foldr
)与
tails
的组合实际上是副形态。例如,在Common Lisp中,它实际上是作为库函数出现的


(*)您可以说,
zipWith
不是map,但例如在Scheme中是这样的。在那里,
map
接受任意数量的参数列表,以及相应的arity的组合运算。但Haskell当然不是Scheme。

要访问下一个元素,请映射到:

因为当没有下一个元素时,您的
op
无法应用,尽管它只会发生在有限的列表中。您可能知道输入列表是无限的,但是您的类型不是无限的,所以最好是安全的

您可能希望添加一个后处理步骤,以除去最后的
Nothing
,并提取
Just
值。似乎是适用的

当然,在这里使用注释中提到的
zipWith
(*)更简洁、更切题;但这种带有
尾部的方式通常更通用,即更容易修改以用于三元
op
等。。使用
zipWith
我们必须使用一系列嵌套的
zipWith
应用程序,并构建人工元组来访问元素;有了
tails
我们根本不需要做这样的事情

map
(通常为
foldr
)与
tails
的组合实际上是副形态。例如,在Common Lisp中,它实际上是作为库函数出现的


(*)您可以说,
zipWith
不是map,但例如在Scheme中是这样的。在那里,
map
接受任意数量的参数列表,以及相应的arity的组合运算。但是Haskell当然不是Scheme。

您可以使用
zipWith
并用它的尾部压缩列表:

mapWithNext :: [Rational]
mapWithNext = zipWith (\x1 x2 -> …) listT (tail listT)
mapWithNext::[Rational]

mapWithNext=zipWith(\x1 x2->…)listT(tail listT)
您可以使用
zipWith
并使用其尾部压缩列表:

mapWithNext :: [Rational]
mapWithNext = zipWith (\x1 x2 -> …) listT (tail listT)
mapWithNext::[Rational]

mapWithNext=zipWith(\x1->…)listT(tail listT)
zipWith
与列表及其尾部一起使用。测试[1,2..]的结果应该是什么<代码>[3,5,7,9,…]
[3,6,10,…]
?@WillemVanOnsem谢谢。
zipWith
函数正是我想要的。将
zipWith
与列表及其尾部一起使用。测试[1,2..]
的结果应该是什么<代码>[3,5,7,9,…]或
[3,6,10,…]
?@WillemVanOnsem谢谢。
zipWith
函数正是我想要的。