我想定义一个简单的函数,将单个整数的列表变成一个较大的整数。例如,给出的列表[1,5,2,0]它会返回1520 做,在基地10我用:Haskell:试图用两个参数定义函数时出错
calc_nr [] = 0
calc_nr (a:y) = a * 10^(length y) + (calc_nr y)
现在,我想延伸到不同的基础,它可以通过将表达式中的基数10次幂改变为期望的基数来完成。为此,我考虑接受另一个论据b,并以基础权力取代基础权力。
但是,当我尝试这样做时出现了一些错误。写作:
calc_nr b [] = 0
calc_nr b (a:y) = a * b^(length y) + (calc_nr y)
给我的错误:
* Occurs check: cannot construct the infinite type: t ~ [t]
Expected type: [t] -> t
Actual type: t -> [t] -> t
* Relevant bindings include
calc_nr :: [t] -> t (bound at calc_nr.hs:39:1)
我是新来的Haskell,所以也许这是一个相当愚蠢的错误,但任何帮助将非常感激!
我真的希望GHC将采取叶出榆木的剧本,并把'可能原因:“fromBaseRep”施加太少arguments'前,中央。 – SwiftsNamesake
@SwiftsNamesake好的,有时来自GHC的建议是一个红色的鲱鱼,所以GHC首选首先提到某个问题,然后跟随一个可能的原因。 – chi
确实。另外,我有几次看到函数foo的“可能原因”被应用于2个参数,但其类型只有3个。 – leftaroundabout