Haskell 这段代码应该在一个不能被3除的列表中找到一个Int,然后说False

Haskell 这段代码应该在一个不能被3除的列表中找到一个Int,然后说False,haskell,Haskell,我只想让代码找到列表中不能被三除的任何数字(不仅仅是第一个),然后说False 我刚开始学习Haskell。如果你遇到一个可以被3整除的数字,你需要继续搜索列表。否则子句需要递归调用函数 test4 :: [Int] -> Bool test4 [] = False test4 (x:xs) | mod x 3 /= 0 = False | otherwise = True 但我建议您尽可能避免编写低级模式匹配和递归代码。Haskell是一种高级语言!简单地说,您希望函数测

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


我刚开始学习Haskell。

如果你遇到一个可以被3整除的数字,你需要继续搜索列表。
否则
子句需要递归调用函数

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

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

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

我认为这个版本更清晰、更容易阅读,而且更简短。

如果你遇到一个可以被3整除的数字,你需要继续搜索列表。
否则
子句需要递归调用函数

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

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

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

我认为这个版本更清晰、更容易阅读,而且更简短。

新的test4不起作用,因为它从不说true(我可以将test[]=False改为true,但空列表应该保持False)。基本情况应该是
true
;如果列表中没有数字,那么确实没有不能被3整除的数字。如果您试图确定列表中的任何数字是否可以被3整除,那么基本情况应该是
False
。我认为初学者应该使用递归和模式匹配从头开始编写解决方案,直到不再伤害他们的大脑(至少这对我来说是有效的)我讨厌看到
mod
rem
也可以。是的,
rem
在数学上是不幸的,但是
mod
只是在某些情况下的改进。我希望Haskell使用“欧几里德风格”(非负余数)和Knuthian除法,而不是机器风格和Knuthian除法。新的test4不起作用,因为它从不说true(我可以将test[]=False改为true,但空列表应该保持False),基本情况应该是
true
;如果列表中没有数字,那么确实没有不能被3整除的数字。如果您试图确定列表中的任何数字是否可以被3整除,那么基本情况应该是
False
。我认为初学者应该使用递归和模式匹配从头开始编写解决方案,直到不再伤害他们的大脑(至少这对我来说是有效的)我讨厌看到
mod
rem
也可以。是的,
rem
在数学上是不幸的,但是
mod
只是在某些情况下的改进。我希望Haskell使用“欧几里德风格”(非负余数)和Knuthian除法,而不是机器风格和Knuthian除法。哦,好吧。