Domanda

Come posso implementare loop in PLT-schema come in java -

for(int i=0;i<10;){
     for(int j=0;j<3;){
          System.out.println(""+j);
          j++;
     }
      System.out.println(""+i);
      i++;
}
È stato utile?

Soluzione

Il vostro esempio in Java non mappa direttamente sul linguaggio Scheme semplicemente imparare alcune nuove parole chiave come non ci sono costrutti espliciti per l'attuazione di un ciclo for in Scheme (a meno che non si scrive un costrutto voi stessi!). Il modo di fare questo libro di cucina in Scheme è quello di definire una funzione ricorsiva che loop su una lista. Ecco un esempio di come fare una funzione di stile per-loop in Scheme:

(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

Tratto da questa pagina:

Guile e Scheme Link

Ecco un altro link ad una pagina che descrive le idee è necessario capire di tradurre loop da linguaggi imperativi di Schema:

Schema costrutti di loop

Scheme è un linguaggio davvero interessante per imparare, si dovrebbe anche leggere la struttura e interpretazione dei programmi per elaboratore , che è il libro di testo usato in passato per l'insegnamento al MIT Scheme.

Altri suggerimenti

In PLT si può fare questo:

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

Il costrutto di iterazione in Scheme è "do", si può guardare in su nel R5RS specifica .

L'esempio che ha dato sarebbe simile a questa:

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

(do ...) è un po 'più generale di quello che si presenta in questo esempio. È possibile ad esempio rendere restituisce un valore invece di usarlo per i suoi effetti collaterali. E 'anche possibile avere molti "contatori":

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

Ti sto suggerendo di dare un'occhiata alla "Le avventure di Michele Simionato di un Pythonista in schemeland ". E 'per Python-> schema, ma, è davvero ben scritto e, cosa più importante, è da procedural-> funzionale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top