¿Cómo puedo aplicar bucle en el PLT-esquema como en java-Loop en PLT Scheme
for(int i=0;i<10;){
for(int j=0;j<3;){
System.out.println(""+j);
j++;
}
System.out.println(""+i);
i++;
}
¿Cómo puedo aplicar bucle en el PLT-esquema como en java-Loop en PLT Scheme
for(int i=0;i<10;){
for(int j=0;j<3;){
System.out.println(""+j);
j++;
}
System.out.println(""+i);
i++;
}
Su ejemplo en Java no se correlaciona directamente en lenguaje Scheme con sólo aprender algunas palabras clave nuevas ya que aren construcciones explícitas para implementar un bucle for en Scheme (¡a menos que usted mismo escriba una construcción!). La forma de libro de cocina para hacer esto en Scheme es definir una función recursiva que recorre una lista. Aquí está un ejemplo de cómo hacer una función de estilo de bucle en el Esquema:
(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
Tomado de esta página:
Aquí hay otro enlace a una página que describe las ideas que necesita para entiende que traducir los bucles de los lenguajes imperativos con el Esquema:
es un esquema Lenguaje realmente interesante para aprender, también debe leer el Structure and Interpretation of Computer Programs, que es el libro de texto utilizado anteriormente para enseñar Scheme en MIT.
Gracias hombre. Esto es de gran ayuda :) – fireball003
No hay problema, me hace pensar con cariño sobre mis experiencias positivas con Scheme en la universidad. Aprender un lenguaje funcional como Scheme puede convertirlo en un mejor programador, algo que le ayuda a pensar en soluciones elegantes para los problemas. Una vez que sienta que Scheme está empezando a tener sentido, le recomiendo consultar otro lenguaje "diferente", como Prolog. Eso es diferente tanto de Scheme como de Java, y puede enseñarte diferentes cosas nuevas. Buena suerte. :) –
Le sugiero que eche un vistazo a "The adventures of a pythonista in schemeland" de Michele Simionato. Es para python-> esquema, pero, es realmente bien escrito y, más importante aún, es procedural-> funcional.
El constructo de iteración en Scheme es "do
", puede buscarlo en el R5RS specification.
El ejemplo que diste sería algo como esto:
(do ((i 0 (+ i 1))) ((> i 9))
(do ((j 0 (+ j 1))) ((> j 2))
(display j)
(newline))
(display i)
(newline))
(do ...)
es un poco más general que lo que se muestra en este ejemplo. Por ejemplo, puede hacer que devuelva un valor en lugar de solo usarlo para sus efectos secundarios. También es posible tener muchos "contadores":
(do ((i 0 (+ i 1)
(j 0 (+ j 2))
((stop? i j) <return-value>)
exprs...)
para ser claros, el segundo ejemplo con dos variables de bucle será complicado si no señala que todas las variables se repiten al mismo tiempo: un "do" = un bucle. este ejemplo se correspondería estrechamente con el ciclo C "for (i = 0, j = 0;!detener (i, j); i = i + 1, j = j + 2) {exprs();} return return_value; ". Bueno, básicamente eso es correcto. Mayormente. – Aaron
Sí, eso es cierto. Editaré la publicación más tarde e intentaré aclarar las cosas un poco. – Jonas
En PLT se puede hacer esto:
(for ([i (in-range 10)])
(for ([j (in-range 3)]) (printf "~s\n" j))
(printf "~s\n" i))
Gracias musicfreak, estoy aprendiendo él. Es por eso que hice esta pregunta :) El documento del esquema no está claro para mí. Pero creo que estaré acostumbrado a eso pronto. – fireball003
Bien, solo asegurándome de que esta no sea una de esas cosas de "haz las tareas para mí". :) No lo sé Esquema, pero buena suerte! –
Si fuera un problema de tarea, entonces vería "problema" en lugar de "problema de sintaxis". – fireball003