2011-12-27 30 views
2

我學習計劃,並希望寫一個遞歸過程,它輸出到每個運行級別控制檯:顯示器輸出端口遞歸過程 - 方案

(dummy 10) 

(define (dummy count) 
    (if (= 0 count)   
     (runtime) 
     ((display "test" console-i/o-port) (dummy (- count 1))))) 

,然後加入測試

但似乎只打印了最後一個過程的輸出。 我該怎麼做才能做到這一點?謝謝。 (我使用MIT的方案)

+0

你究竟想要顯示什麼?計數的當前值?或者「測試」這個詞的數量是多少? – 2011-12-27 17:00:07

+0

是的,只是「測試」一詞。這沒關係。我只想知道爲什麼只有一個單詞「測試」打印出來。 – 2011-12-28 03:27:54

+0

不錯,請看下面的答案,它的確如此,以一種簡單的方式 – 2011-12-28 03:29:03

回答

2
((display "test" console-i/o-port) (dummy (- count 1))) 

這是一個函數調用,其中(display "test" console-i/o-port)是,是應該被調用,(dummy (- count 1))是參數傳遞給函數的函數。由於`(display「test」console-i/o-port)實際上並沒有返回函數,所以這會導致錯誤(打印測試後)。

做你真正想做的事(首先執行(display ...),然後執行(dummy ...))的東西,你可以使用begin形式是這樣的:

(begin (display "test" console-i/o-port) (dummy (- count 1))) 
+0

感謝您的答覆。因此,在方案中,這個結構(A B C..D),A的一切必須是A是一個函數,其餘的是參數。爲什麼我仍然在SCIP書籍程序中看到像((print a)(print b))? – 2011-12-28 03:36:25

2

如果你想要做的是顯示「測試」 count次數(在本例中爲10),你可以做這樣的事情(假設count是正數):

(define (dummy count) 
    (if (> count 0) 
     (begin 
     (display "test" console-i/o-port) 
     (dummy (- count 1))))) 
+0

感謝您的回答。 – 2011-12-28 03:36:48