当我输入以下内容时:
(define (root a b c)
(/ (+ (-b) (sqrt (- (exp b 2) (* 4 a c)))) (* 2 a)))
然后输入:
(root 3 6 2)
我收到一条消息,指出该过程有两个参数,但只需要一个。我做错了什么?
答案 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 ,因为这些基本功能很难保持直线。