![](/img/trans.png)
[英]Resolve 'Equations for ‘cycleNext’ have different numbers of arguments'
[英]Equations for `someFunction' have different numbers of arguments (CodeWars)
我正在使用以练习/学习 Haskell。 我无法理解为什么给定的情况适用于我的示例本地代码,而不适用于 CodeWars。
关于代码战:
module Codewars.Kata.Negative where
makeNegative :: (Num a) => a -> a
makeNegative x = x + x
makeNegative = error "todo: makeNegative"
这给了我:
Codewars/Kata/Negative.hs:4:1:
Equations for `makeNegative' have different numbers of arguments
Codewars/Kata/Negative.hs:4:1-22
Codewars/Kata/Negative.hs:5:1-41
但是当我在本地测试时:
import Data.List
import System.IO
example :: (Num a) => a -> a
example x = x + x
main = do
print (example(3))
它正确返回 6。 我什至无法尝试解决问题,因为编译器抱怨参数。 我有点明白 Num 是一个“类型类”,但我不明白它在代码战中的工作方式有何不同。 我猜是因为那里的“where”子句。
问题在于您对makeNegative
的定义。 请注意,定义中有三行:
makeNegative :: (Num a) => a -> a
makeNegative x = x + x
makeNegative = error "todo: makeNegative"
第一个是类型签名,然后是两个定义。 当参数的模式匹配和处理不同的情况时,通常会提供多个定义; 但是在这种情况下,模式匹配永远不会失败; 所以error
行永远不会运行。
不管它永远不会运行; Haskell 仍然要求函数的所有实现具有相同数量的绑定参数, makeNegative x =
绑定一个参数(即x
); 但第二个定义makeNegative =
不绑定任何参数。 在这种情况下,它看起来像是一个占位符定义,因此您可以删除有error
的行,它应该可以工作。
您的example
测试只有一个定义,因此不会遇到此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.