Haskell函数检查数字是否为奇数,不使用奇数函数

Haskell函数检查数字是否为奇数,不使用奇数函数,haskell,list-comprehension,ghc,pattern-guards,Haskell,List Comprehension,Ghc,Pattern Guards,有人能帮我吗?我正在尝试编写一个函数来检查x是否为奇数,而不使用奇数函数。 像这样它不起作用,但我不知道为什么 ugerade :: Integral a => a -> Bool ugerade x |x elem oddList = True |otherwise = False where oddList=[x | x<-[1,3..]] ugerade::积分a=>a->Bool ugerade x |x elem od

有人能帮我吗?我正在尝试编写一个函数来检查x是否为奇数,而不使用奇数函数。 像这样它不起作用,但我不知道为什么

   ugerade :: Integral a => a -> Bool
   ugerade x
    |x elem oddList  = True
    |otherwise = False
    where
     oddList=[x | x<-[1,3..]]
ugerade::积分a=>a->Bool
ugerade x
|x elem oddList=True
|否则=假
哪里
oddList=[x | x a->Bool
网址:http://www.Users/毛里求斯/Desktop/Haskell/u02/2-2/funktionen.hs:24:11-33
类型变量“t0”不明确
相关绑定包括
oddList::[t0]
(绑定地址为/Users/Mauritis/Desktop/Haskell/u02/2-2/funktionen.hs:29:4)
注意:有几个潜在的例子:
实例积分a=>Num(GHC.Real.Ratio a)
--在“GHC.Real”中定义
实例Num Integer--在“GHC.Num”中定义
实例Num Double--在“GHC.Float”中定义
…加上另外三个
在表达式中:1
在表达式中:[1,3..]

在列表理解的stmt:x中,问题在行中

x elem oddList
哪一个应该说

elem x oddList
因为
elem
是一个函数
elem::Eq a=>a->[a]->Bool
,或者

x `elem` oddList
使用反勾号表示中缀函数应用程序的位置


请注意,您的函数无法按预期工作。对于奇数,它最终将返回
True
(尽管对于大参数需要很长时间),但对于偶数,它将永远不会返回,因为函数无法证明偶数从不在列表中
oddList

还要注意的是

oddList = [ x | x <- [1,3..] ]
相反,还有写作

f x | x `elem` oddList = True
    | otherwise        = False
是多余的,你可以直接写

oddList = [1,3..]
f x = x `elem` oddList
甚至

f x = x `elem` [1,3..]


模也被禁止了吗?不,不是。但我想通过列表理解来做。我不理解错误
不是。即使是
?:-)到目前为止,你努力的精神更多的是
ungerade x=Data.Maybe.fromJust(lookup x(zip[1..](cycle[True,False]))
它至少终止于正的
x
。我用模运算解决了这个问题。我没有首先考虑这个问题,但如果你不想使用eventhanks,这显然是最简单的方法。这很有效!至少没有错误,但它不会终止它。它将永远搜索列表
f x = x `elem` [1,3..]
f = (`elem` [1,3..])