“application: not a procedure” while computing binomial

ⅰ亾dé卋堺 提交于 2019-12-02 10:06:43

In Scheme (and Lisps in general), parentheses are placed before a procedure application and after the final argument to the procedure. You've done this correctly in, e.g.,

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

However, you've got an error in one of your arguments to one of your calls to binomial:

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

Based on the syntax described above (n) is an application where n should evaluate to a procedure, and that procedure will be called with no arguments. Of course, n here actually evaluates to an integer, which is not a procedure, and can't be called (hence “application: not a procedure”). You probably want to remove the parentheses around n:

(binomial n (- k 1))

It's also worth pointing out that Dr. Racket should have highlighted the same portion of code that I did above. When I load your code and evaluate (binomial 2 1), I get the following results in which (n) is highlighted:

Your error is here:

binomial(n)

n is an integer, not a function. If you put parentheses around it like that, scheme tries to invoke an integer as a function, which naturally produces an error.

This is the correct code:

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

Problem is at here:

(binomial (n) (- k 1))
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!