2010-07-31 71 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)))