2011-12-27 6 views
2

私はスキームを学習し、各実行レベルでコンソールにどの出力再帰的な手順を書きたいのです:表示 - スキーム

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

そしてでテスト:

(dummy 10) 

しかし、呼び出された最後のプロシージャの出力だけが出力されるようです。 これを実現するにはどうすればよいですか?ありがとう。 (私はMIT-スキームを使用しています)

+0

そして正確に何を表示したいですか? countの現在の値?あるいは、「テスト」という言葉の回数は何回ですか? –

+0

うん、ちょうど "テスト"という言葉。それは正しいことではありません。私はちょうど1単語 "テスト"が印刷された理由を知りたい。 –

+0

良い、以下の私の答えを見て、それは、単純な方法でそれを行う –

答えて

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)は実際に関数を返さないので、エラーが発生します(印刷テスト後)。何がやりたいことは、「テスト」を表示している場合

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

ur ansありがとう。だからスキームでは、この構造(A B C. D)のすべては、Aは関数であり、残りは引数である必要があります。なぜ私はSCIPの本の中で(print a)(print b)のようなプログラムを見ているのですか? –

2

count:あなたが実際に何をしたいのか行うには

(最初(display ...)を実行し、その後(dummy ...)を実行する)、あなたはこのようにbeginフォームを使用することができますあなたはこのような何かを行うことができた回数(例では10)(countが正であると仮定して):

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

URのお返事ありがとうございます。 –