2010-07-31 47 views
2

当我输入以下内容:我在做什么错在Scheme?

(define (root a b c) 
    (/ (+ (-b) (sqrt (- (exp b 2) (* 4 a c)))) (* 2 a))) 

,然后输入:

(root 3 6 2) 

我得到一个消息,表明该程序有两个论点,但只只需要一个。我究竟做错了什么?

+2

我不假设你有一个'-b'定义的函数;因此,你很可能需要'( - b)'中的'-'和'b'之间的空格。 – Svante 2010-07-31 12:19:05

回答

4

exp函数确实没有指数,它做了别的事情。 (我不知道)。

你想通常被称为pow的“权力”,但可能不会在你的环境中定义的,所以我建议你只是定义自己的square方法是什么:

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

然后:

(define (root a b c) 
    (/ (+ (- b) (sqrt (- (square b) (* 4 a c)))) (* 2 a))) 

编辑:哦,你也必须改变一对夫妇间距问题,如(* 4 a c)代替(*4 a c)(- b)而不是(-b)。您总是必须用空格将操作符与操作数分开。

+10

为了好奇,'(exp n)'返回[e](http://en.wikipedia.org/wiki/Euler's_number)^ n。并且Scheme具有权力功能,但它被称为'expt' – 2010-07-31 03:40:59

+0

谢谢!这工作。 – Skoolpsych2008 2010-07-31 03:41:32

+0

谢谢迈克尔 – 2010-07-31 05:28:30

0

错误引用的函数是exp,它只接受一个参数。 exp函数计算指数函数,而不是指数。你想expt,这引起了根x到指数y

(expt b 2) 

你也可以乘次数本身。

因为这些基本功能很难保持直线,所以我通常保留R5RS方案编程语言

1

程序expe的数字提升为其参数的大小,如果您需要引用另一个参数的大小,请使用expt。更好的是,由于你只需要平方b,简单的乘法就可以了。像这样:

(define (root a b c) 
    (/ (+ (- b) (sqrt (- (* b b) (* 4 a c)))) 
     (* 2 a)))