此代码应该在列表中找到一个不能被3分割然后说False的单个Int

1 haskell

test4 :: [Int] -> Bool
test4 [] = False
test4 (x:xs)
   | mod x 3 /= 0 = False
   | otherwise = True
Run Code Online (Sandbox Code Playgroud)

我只是喜欢代码找到一个不能被三分的列表中的任何(不仅仅是第一个)数字,然后说False.

我刚开始学习Haskell.

Ben*_*son 7

如果遇到可被3整除的数字,则需要继续搜索列表.该otherwise子句需要递归调用该函数.

test4 :: [Int] -> Bool
test4 [] = True
test4 (x:xs)
   | mod x 3 /= 0 = False
   | otherwise = test4 xs
Run Code Online (Sandbox Code Playgroud)

但是我建议你尽量避免编写低级模式匹配和递归代码.Haskell是一门高级语言!用简单的英语,你希望你的函数测试列表中的所有元素是否可以被3整除.这就是all :: (a -> Bool) -> [a] -> Bool函数的用途:

test4 = all (\x -> x `mod` 3 == 0)
Run Code Online (Sandbox Code Playgroud)

我认为这个版本更清晰,更容易阅读,也更短.

  • 基本情况*应该是'真'; 如果列表中没有数字,那么确实没有数字*不能*被3整除.如果你试图确定列表中的*any*数字是否可以被3整除,那么基本情况应该是`返回FALSE. (3认同)