【发布时间】:2015-05-23 13:06:12
【问题描述】:
我已经开始学习 Haskell 并且遇到了问题。我尝试理解 lambda 并创建函数 mo06
mo06 f x = if f x
then x
else x * x
我可以在 ghci 中调用它:
λ mo06 (== 1) 1
1
λ mo06 (== 1) 3
9
没问题 - 没有问题也没有问题,但是......
...我想把我的函数写成
mo08 f = fac (\x -> if f x then x else x * x)
在哪里
fac 表示阶乘:
fac :: Num a => Int -> Int
fac n
| n == 0 = 1
| n > 0 = n * fac (n-1)
| otherwise = error "fac only defined on natural numbers"
并像以前一样调用它
mo08 (==1) 3
我尝试并得到一个错误:
无法将预期类型“a -> a”与实际类型“Int”匹配。
将 fac 更改为 (fromIntegr fac) 没有帮助。
谢谢。
【问题讨论】:
-
Num a对你的Int -> Int函数的约束是没有意义的;只需将其删除。或者,从Int -> Int更改为a -> a。