我在做什么错在Scheme?
当我输入以下内容:我在做什么错在Scheme?
(define (root a b c)
(/ (+ (-b) (sqrt (- (exp b 2) (* 4 a c)))) (* 2 a)))
,然后输入:
(root 3 6 2)
我得到一个消息,表明该程序有两个论点,但只只需要一个。我究竟做错了什么?
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)
。您总是必须用空格将操作符与操作数分开。
为了好奇,'(exp n)'返回[e](http://en.wikipedia.org/wiki/Euler's_number)^ n。并且Scheme具有权力功能,但它被称为'expt' – 2010-07-31 03:40:59
谢谢!这工作。 – Skoolpsych2008 2010-07-31 03:41:32
谢谢迈克尔 – 2010-07-31 05:28:30
错误引用的函数是exp
,它只接受一个参数。 exp
函数计算指数函数,而不是指数。你想expt
,这引起了根x
到指数y
:
(expt b 2)
你也可以乘次数本身。
因为这些基本功能很难保持直线,所以我通常保留R5RS或方案编程语言。
程序exp
将e
的数字提升为其参数的大小,如果您需要引用另一个参数的大小,请使用expt
。更好的是,由于你只需要平方b
,简单的乘法就可以了。像这样:
(define (root a b c)
(/ (+ (- b) (sqrt (- (* b b) (* 4 a c))))
(* 2 a)))
我不假设你有一个'-b'定义的函数;因此,你很可能需要'( - b)'中的'-'和'b'之间的空格。 – Svante 2010-07-31 12:19:05