0

我正在定义一个函数binomial(n k)(又名帕斯卡三角形),但出现错误:

    application: not a procedure;
    expected a procedure that can be applied to arguments
    given: 1
    arguments...:
    2

我不明白这个错误,因为我认为这定义了我的功能:

    (define (binomial n k)
      (cond  ((or (= n 0) (= n k)) 1)
          (else (+ (binomial(n) (- k 1))(binomial(- n 1) (- k 1)))))) 
4

3 回答 3

2

在 Scheme(和一般的 Lisps)中,括号放在过程应用程序之前和过程的最后一个参数之后。你已经正确地做到了,例如,

(= n 0)
(= n k)
(- k 1)
(binomial(- n 1) (- k 1))

但是,您对以下调用之一的参数binomial之一有错误:

(define (binomial n k)
  (cond  ((or (= n 0) (= n k)) 1)
      (else (+ (binomial(n) (- k 1))(binomial(- n 1) (- k 1)))))) 
                        ***

基于上述语法,(n)应用程序n应该评估一个过程,并且该过程将在没有参数的情况下被调用。当然,n这里实际上计算为一个整数,它不是一个过程,并且不能被调用(因此“应用程序:不是一个过程”)。您可能想删除周围的括号n

(binomial n (- k 1))

还值得指出的是,Racket 博士应该突出显示我在上面所做的同一部分代码。当我加载您的代码并评估(binomial 2 1)时,我得到以下(n)突出显示的结果:

球拍博士的错误

于 2013-10-21T12:56:11.203 回答
0

你的错误在这里:

binomial(n)

n是整数,不是函数。如果像这样在它周围加上括号,scheme 会尝试将整数作为函数调用,这自然会产生错误。

于 2013-10-21T10:13:26.753 回答
0

这是正确的代码:

 (define (binomial n k)
          (cond  ((or (= n 0) (= n k)) 1)
              (else (+ (binomial n (- k 1))(binomial(- n 1) (- k 1)))))) 

问题在这里:

(binomial (n) (- k 1))
于 2013-10-21T12:13:45.053 回答