2017-01-25 79 views
-1

請告訴我爲什麼下面的Scheme函數不會打印結果。我正在使用DrRacket。Scheme函數不會打印

#lang sicp 

(define (sqr x) (* x x)) 

(define (sum_of_greatest_squares a b c) 
    (if(> a b) 
     (if(> a c) 
      (if(> b c) 
        ((+ (sqr a) (sqr c))(+ (sqr a) (sqr b)))) 
      (+ (sqr a) (sqr c)) 
     ) 
     (if(> b c) 
      (if (> a c) 
        ((+ (sqr a) (sqr b))(+ (sqr b) (sqr c))) 
      (+ (sqr c) (sqr b)))) 
     )) 
(sum_of_greatest_squares 3 4 5) 
+0

你是不是在任何地方打印任何東西。 –

+1

http://stackoverflow.com/help/mcve – naomik

回答

1

它很簡單,看到你不是很注重細節和你的學習。你的代碼包含無數的錯誤,你已經允許自己把習慣從其他語言帶入你的學習計劃。 DrRacket清楚地顯示你的程序有語法錯誤,所以這是一個很好的開始。

我已經加粗的部分缺失的else表達

(define (sum_of_greatest_squares a b c) 
    (if(> a b) 
     (if(> a c) 
      (if(> b c) ((+ (sqr a) (sqr c))(+ (sqr a) (sqr b)))) 
      (+ (sqr a) (sqr c)) 
     ) 
     (if(> b c) 
      (if (> a c) ((+ (sqr a) (sqr b))(+ (sqr b) (sqr c))) 
      (+ (sqr c) (sqr b)))) 
     )) 

代碼的格式是壞的,因此就更難看到失誤。

一起移動,這裏的另一個大錯誤

((+ (sqr a) (sqr c))(+ (sqr a) (sqr b))) 

不管你想要的,就像你可以在某些語言你不能只是把()()用於Lisp/Scheme/Racket中的程序應用。

a = 1b = 2,並且c = 3,上面的線將是

((+ (sqr 1) (sqr 3))(+ (sqr 1) (sqr 2))) 
((+ 1  9  )(+ 1  4  )) 
(10         5) 

最後一行是(10 5)它說「申請人數5至10號相當於」 - 這是沒有意義的。

你在代碼中也會犯同樣的錯誤。嘗試先解決這些問題,然後更新您的問題。

ps:不要使用snake_case名稱,如sum_of_greatest_squares。 Schemers通常會將其格式設置爲sum-of-greatest-squares


目前尚不清楚你的程序應該做什麼。我的猜測是它應該平方兩個最大的輸入,然後求和它們。

可以if表達一個巨大的層次結構,以決定哪兩個參數與執行計算...但另一種方式是始終使用相同的兩個參數來計算結果,但使用if表達式將適當的參數移動到正確的位置。

認爲這是一個橫向的替代你的程序

(define (sqr x) (* x x)) 

(define (sum-of-greatest-squares a b c) 
    (cond ((< a b) (sum-of-greatest-squares b c a)) 
     ((< b c) (sum-of-greatest-squares a c b)) 
     (else (+ (sqr a) (sqr b))))) 

這將始終兩者之和最大的數字的平方,但在一個更清潔的方式這樣做


最後,約爾格提到你實際上沒有在任何地方打印任何東西。我知道你的意思是暗示DrRacket沒有在Interactions窗口中顯示你的程序的結果。但是,如果你想明確地打印到控制檯,看看display* and print* procedures

+0

不管怎樣,你的問題在技術上根本不準上是因爲它有明顯的語法錯誤。我甚至都試圖回答它。 – naomik

+0

謝謝。由於括號不起作用。這就是我想要的。 #lang SiC顆粒 (定義(SQR X)(* XX)) (定義(加總最大平方ABC) (如果(> AB) (如果(> AC) (如果(> BC ) (+(SQR一)(SQR b)) (+(SQR一)(SQR C)) ) (+(SQR一)(SQR C)) ) (如果(> BC) (如果(> AC) (+(SQR一)(SQR b)) (+(SQR b)(SQR C))) (+(SQR C)(SQR b))) )) (總和最大正方形7 8 10) – spheroid

+1

@spheroid你有三個級別的比較,而2是足夠的。如果你知道'a'大於'b'那麼'a'是兩個最大的之一。那麼你把最大的'b'和'c'。對於'a'小於'b'的情況,您取'b'和'a'和'c'中最大的一個。 – Sylwester