Haskell 哈斯克尔·帕斯卡';s三角

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 以下错误是:

我必须创建一个递归函数,它接受两个数字(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
以下错误是:

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