List 在Haskell的列表中查找下一个true

List 在Haskell的列表中查找下一个true,list,haskell,List,Haskell,我必须找到一个函数g:[Bool]->Integer,使得g给出最低的ublication,其中True在布尔值列表中。比如说, 我对函数取[]或列表不为真的情况不太感兴趣,因为我正在编写一个布尔列表为无限的程序,并且证明了总是存在真的。我认为这是以下定义的开始: 你能帮我找到……吗?非常感谢。最简单的方法可能是使用: 因此,在这里,您使用id作为谓词,以便接受True,而False使测试失败。因为在你们的问题中,你们说你们知道这样的元素总是存在的,你们可以用fromJust to chomp

我必须找到一个函数g:[Bool]->Integer,使得g给出最低的ublication,其中True在布尔值列表中。比如说,

我对函数取[]或列表不为真的情况不太感兴趣,因为我正在编写一个布尔列表为无限的程序,并且证明了总是存在真的。我认为这是以下定义的开始:


你能帮我找到……吗?非常感谢。

最简单的方法可能是使用:

因此,在这里,您使用id作为谓词,以便接受True,而False使测试失败。因为在你们的问题中,你们说你们知道这样的元素总是存在的,你们可以用fromJust to chomp of the Just-so-to-to-so-to-so-to-to-so-to-to-to-to-to-to-to-to-to-to-to-to-to-to-to

在您的示例中,您似乎使用了单索引列表,在这种情况下,您可以定义:

-- 1-indexed
import Data.List(findIndex)
import Data.Maybe(fromJust)

g = (1+) . fromJust . findIndex id
在ghci中:

最后一点:应该是:

     | not (or xs) = error "There is no True in your list"
而不是

     | not (and xs) = error "There is no True in your list"

因为只有当所有元素都为真时,和才为真。

另一种方法,没有错误处理

> fst . head . filter snd . zip [1..]
我认为

(1+) . length . takeWhile not

我应该这样做。如果选择基于0的索引,则可以省去1+,也就是说,可以使用的索引

如果我正确理解你的要求,你的第二个守卫在我看来是错的。而且,我不认为你可以从一开始就排除这个案子,无论如何,你的函数必须永远运行。但是当我定义g:Not in scope fromJust和findIndex时,haskell给了我一个错误。@joseabp91:你应该导入数据。列表和导入数据。也许。我已经编写了导入数据。列表和导入数据。也许。但是为什么g在你的定义中不带任何参数呢?因为eta减少。@joseabp91:fx=ghx等于:f=g。H
     | not (or xs) = error "There is no True in your list"
     | not (and xs) = error "There is no True in your list"
> fst . head . filter snd . zip [1..]
(1+) . length . takeWhile not