質問

Javaのようにplt-schemeでループを実装するにはどうすればよいですか?

for(int i=0;i<10;){
     for(int j=0;j<3;){
          System.out.println(""+j);
          j++;
     }
      System.out.println(""+i);
      i++;
}
役に立ちましたか?

解決

Javaであなたの例では、直接スキームのループのために実装するための明示的な構築物が存在しないとしてだけで(あなたが書いていない限り、自分自身を構築!)いくつかの新しいキーワードを学習することにより、Scheme言語にマップされません。スキームでこれを行うには料理の本方法は、リストをループ再帰関数を定義することです。ここではSchemeでforループ形式の関数を実行する方法の例を示します。

(define (doit x x-max dx)
  (if (<= x x-max)
    (begin
      ;;...perform loop body with x...
      (doit (+ x dx) x-max dx))))

(doit a b dx) ; execute loop from a to b in steps of dx

このページから撮影:

ガイルとSchemeリンクする

ここでは、スキームに命令型言語からループを変換するために理解する必要がアイデアを説明するページへの別のリンクです

スキームループ構造

スキームが学ぶための非常に興味深い言語であり、あなたはまた、コンピュータプログラム構造と解釈をお読みください>、以前はMITでスキームを教えるために使用教科書です。

他のヒント

PLTでは、これを行うことができます

(for ([i (in-range 10)])
  (for ([j (in-range 3)]) (printf "~s\n" j))
  (printf "~s\n" i))

Scheme の反復構成は "do」で調べることができます。 R5RS仕様.

あなたが挙げた例は次のようになります。

(do ((i 0 (+ i 1))) ((> i 9))
  (do ((j 0 (+ j 1))) ((> j 2))
    (display j)
    (newline))
  (display i)
  (newline))

(do ...) この例で示されているものよりももう少し一般的です。たとえば、副作用のためだけに使用するのではなく、値を返すようにすることもできます。多数の「カウンター」を持つことも可能です。

(do ((i 0 (+ i 1) 
     (j 0 (+ j 2)) 
    ((stop? i j) <return-value>)
   exprs...)

私はミケーレSimionatoの」への冒険を見てみるために、あなたを示唆していますschemeland「の中pythonistaの。それはそれはだ、python->スキームのためだが、の本当にを良くして、より重要なのは、それからの書面procedural->機能ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top