我是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
答案 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))))))