我在Scheme上做错了什么?

时间:2010-07-31 03:18:03

标签: scheme

当我输入以下内容时:

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

然后输入:

(root 3 6 2)

我收到一条消息,指出该过程有两个参数,但只需要一个。我做错了什么?

3 个答案:

答案 0 :(得分:4)

exp函数不会真正做指数,它会做其他事情。 (我不知道。)

您想要的内容通常称为“{1}}”,但可能未在您的环境中定义,因此我建议您定义自己的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)而不是{{} 1}}。您总是必须将操作符与带有空格的操作数分开。

答案 1 :(得分:1)

过程exp将数字e提升到其参数的幂,如果你需要提出另一个参数的力量,请使用expt。更好的是,假设您只需要平方b,则可以进行简单的乘法运算。像这样:

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

答案 2 :(得分:0)

错误引用的函数是exp,它只接受一个参数。 exp函数计算指数函数,而不是指数函数。您需要expt,它会将根x提升为指数y

(expt b 2)

您也可以将数字乘以其自身。

我通常会保留R5RS Scheme Programming Language ,因为这些基本功能很难保持直线。