方案:错误:#<undef>不是函数

时间:2017-11-20 15:13:36

标签: scheme

我是Scheme的新手,但我想写的东西似乎很简单。尽管如此,我还有一些东西......我有以下定义:

(define (fast-expt x n)
  (if (even? n)
      (expt (expt x (/ n 2)) 2)
      (expt x n)))

它使用我以前的功能:

(define (expt x n)
  (cond ((= n 0) 1)
        ((= n 1) x)
        ((= n -1) (/ 1 x))
        ((< n 0) (* (/ 1 x) (expt x (+ n 1))))
        (else (* x (expt x (- n 1)))))

函数expt似乎工作正常,但当我尝试测试fast-expt时,它会抛出以下内容:Error: #<undef> is not a function [fast-expt]。如果重要,我使用在线编译器https://repl.it

1 个答案:

答案 0 :(得分:1)

works for me,但请注意expt缺少右括号。也许你需要在在线翻译中expt之前定义fast-expt。或者更好的是,切换到一个好的离线解释器,比如Racket :)。

此外,fast-expt的实现必须调用自身,否则它只适用于第一个偶数指数,从那时起,它只会使用“慢”expt。它应该像这样实现:

(define (square x) (* x x))

(define (fast-expt x n)
   (cond ((zero? n) 1)
         ((even? n) (square (fast-expt x (/ n 2))))
         (else (* x (fast-expt x (- n 1))))))