[英]Haskell type signatures with varying parameters
欧拉计划4:回文数在两个方向上都相同。 由两个2位数字的乘积构成的最大回文为9009 = 91×99。找到由两个3位数字的乘积构成的最大回文。
此解决方案有效:
p004largestPalindrome :: Integer
p004largestPalindrome = largest [ a * b | a <- [100..999], b <- [100..999], isPalindrome $ show(a*b) ]
where
isPalindrome [] = True
isPalindrome [_] = True
isPalindrome (x:xs) = if x == last xs then isPalindrome (init xs) else False
largest [] = 0
largest [x] = x
largest (x:xs) = if x > head xs then largest (x:(tail xs)) else largest xs
我的问题是:鉴于两者都有不同的参数排列方式[[],[x],(x:xs)),您可以为where
子句中的函数分配类型签名吗? 坚持isPalindrome :: (Eq a) -> [a] -> Bool
引发错误。
编辑:我正在尝试插入类型签名,如下所示:
p004largestPalindrome :: Integer
p004largestPalindrome = largest [ a * b | a <- [100..999], b <- [100..999], isPalindrome $ show(a*b) ]
where
isPalindrome :: (Eq a) -> [a] -> Bool
isPalindrome [] = True
isPalindrome [_] = True
isPalindrome (x:xs) = if x == last xs then isPalindrome (init xs) else False
largest [] = 0
largest [x] = x
largest (x:xs) = if x > head xs then largest (x:(tail xs)) else largest xs
你有错字 [应该]
(Eq a) =>...
(箭头应带有等号)– Michal Seweryn
类约束与其使用=>
约束的类型分开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.