我只想在通过的第一项上映射条件函数。
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 之类的东西。似乎是一个简单的问题,但我正在画一个空白。
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)