如何根据列表中的先前值过滤Haskell中的列表元素?

我正在Haskell中创建一个函数,该函数根据条件基于列表中的上一个元素来过滤列表中的数字。

示例

上一个数字是2的倍数

myFunction [1,2,5,6,3]
# expected output:
[5,3]

我知道如何应用filter,但到目前为止,我已经看到过滤器一次只接受一个参数。

我尝试使用scanl1foldl1map,但是我是Haskell的新手,但我没有这样做。有任何线索吗?

o345768478 回答:如何根据列表中的先前值过滤Haskell中的列表元素?

  

编辑

应该是:

self.env.ref('template_external_id').render(render_context)

因为输入:

myFunction []       =  []
myFunction [x]      =  []
myFunction [x,y]    =  if (x `mod` 2) == 0 then [y] else []
myFunction (x:y:xs) =  if (x `mod` 2) == 0 
                      then y : (myFunction xs)
                      else myFunction (y:xs)

正确的输出应为:

myFuntion [1,2,5,6,3]
,

如果您更喜欢使用库函数,则有一种针对这种情况的已知技巧,其中包括用自己的尾巴压缩输入,即初始列表减去第一个元素。

 λ> 
 λ> inls = [1,3]
 λ> 
 λ> let pairs = zip (tail inls) inls
 λ> pairs
 [(2,1),(5,2),(6,5),(3,6)]
 λ> 

,然后生成的对列表就成为mapfilter的简单目标。 如:

λ> let myFunction ls = let pairs = zip (tail ls) ls  in  map fst $ filter (even . snd) pairs
λ> 
λ> ls
 [1,3]
λ> 
λ> myFunction ls
[5,3]
λ> 
本文链接:https://www.f2er.com/3169124.html

大家都在问