List 使用map函数时如何访问下一个元素?
我试图对haskell中列表的每个元素应用一个函数。因此,我正在使用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无法应用,尽管它只会发生在有限的
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
函数正是我想要的。