Haskell 映射直到满足第一个条件

Gor*_*ord 8 haskell

我只想在通过的第一项上映射条件函数。

map (>5) [1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

会导致

[False,False,False,False,False,True,True,True,True]
Run Code Online (Sandbox Code Playgroud)

我正在寻找会导致

[False,False,False,False,False,True,False,False,False]
Run Code Online (Sandbox Code Playgroud)

所以只有第一次出现大于 5 的结果为 True。我尝试了扫描,各种折叠,并尝试滚动我自己的 mapUntil 之类的东西。似乎是一个简单的问题,但我正在画一个空白。

Fro*_*rog 6

break专门将列表分为 2 部分,其中第一部分是 all False,与span相反。

break (>5) [1,2,3,8,2,5,1,7,9]
>>> ([1,2,3],[8,2,5,1,7,9])
Run Code Online (Sandbox Code Playgroud)

然后这就是 chi 所做的:

oneTrue f lst  = map (const False) a ++ rest b
   where (a,b) = break f lst
         rest [] = []
         rest (x:xs) = True : map (const False) xs
Run Code Online (Sandbox Code Playgroud)