Haskell 哈斯克尔·帕斯卡';s三角
我必须创建一个递归函数,它接受两个数字(n和k)并返回它们的二项式系数 我必须使用pascal::Int->Int->Int 我真的不明白哪里出了问题,谢谢你的帮助Haskell 哈斯克尔·帕斯卡';s三角,haskell,Haskell,我必须创建一个递归函数,它接受两个数字(n和k)并返回它们的二项式系数 我必须使用pascal::Int->Int->Int 我真的不明白哪里出了问题,谢谢你的帮助 pascal :: Int -> Int -> Int pascal n k | k == 0 = 1 | n == n = 1 | k > n = 0 | otherwise = pascal(n-1)(k-1) + pascal(n-1) + k 以下错误是:
pascal :: Int -> Int -> Int
pascal n k
| k == 0 = 1
| n == n = 1
| k > n = 0
| otherwise = pascal(n-1)(k-1) + pascal(n-1) + k
以下错误是:
main.hs:7:40: error:
• Couldn't match expected type ‘Int’ with actual type ‘Int -> Int’
• Probable cause: ‘pascal’ is applied to too few arguments
In the second argument of ‘(+)’, namely ‘pascal (n - 1)’
In the first argument of ‘(+)’, namely
‘pascal (n - 1) (k - 1) + pascal (n - 1)’
In the expression: pascal (n - 1) (k - 1) + pascal (n - 1) + k
|
7 | | otherwise = pascal(n-1)(k-1) + pascal(n-1) + k
| ^^^^^^^^^^^
<interactive>:3:1: error:
• Variable not in scope: main
• Perhaps you meant ‘min’ (imported from Prelude)
main.hs:7:40:错误:
•无法将预期类型“Int”与实际类型“Int->Int”匹配
•可能原因:“pascal”用于的参数太少
在“(+)”的第二个参数中,即“pascal(n-1)”中
在“(+)”的第一个参数中,即
'帕斯卡(n-1)(k-1)+帕斯卡(n-1)'
在表达式中:pascal(n-1)(k-1)+pascal(n-1)+k
|
7 | |否则=帕斯卡(n-1)(k-1)+帕斯卡(n-1)+k
| ^^^^^^^^^^^
:3:1:错误:
•变量不在范围内:主
•您的意思可能是“min”(从Prelude导入)
正如例外情况所说,pascal(n-1)
没有多大意义,因为这是一个函数Int->Int
,所以不能将pascal(n-1)(k-1)
和pascal(n-1)
一起添加
因此,您需要传递一个额外的参数。例如:
pascal :: Int -> Int -> Int
pascal _ 0 = 1
pascal n k
| k == n = 1
| k > n = 0
| otherwise = pascal (n-1) (k-1) + pascal (n-1) k
pascal::Int->Int->Int
帕斯卡0=1
帕斯卡n k
|k==n=1
|k>n=0
|否则=帕斯卡(n-1)(k-1)+帕斯卡(n-1)k
请注意,条件n==n
总是正确的,您可能想说n==k
?正如例外情况所说,pascal(n-1)
没有多大意义,因为这是一个函数Int->Int
,所以不能将pascal(n-1)(k-1)
和pascal(n-1)
因此,您需要传递一个额外的参数。例如:
pascal :: Int -> Int -> Int
pascal _ 0 = 1
pascal n k
| k == n = 1
| k > n = 0
| otherwise = pascal (n-1) (k-1) + pascal (n-1) k
pascal::Int->Int->Int
帕斯卡0=1
帕斯卡n k
|k==n=1
|k>n=0
|否则=帕斯卡(n-1)(k-1)+帕斯卡(n-1)k
请注意,条件n==n
始终为真,您可能想说n==k