2010-02-28 14 views

Respuesta

6

Depende de lo que quiere decir con la construcción de bucles: hay varios tipos. bucles infinitos, iteradores - bucles que cuentan cada elemento de una matriz o de hash - y bucles generales como estilo de C

for (int i = 0; i < 10; i++) 

Wikipedia tiene una mesa de apoyo a este tipo de construcciones por idioma: Loop system cross reference table

Para responder a su pregunta completamente, Haskell y Scheme son dos ejemplos de idiomas que no tienen los lazos estándar for integrados; generalmente se hacen usando recursión.

+0

en Scheme, por ejemplo, "recursividad de cola" desempeña el papel de una construcción de bucle. –

0

La respuesta obvia (si cuenta como idioma) son varios tipos de idiomas de ensamblado.

+2

Diría que un salto condicional es exactamente una "construcción de bucle", pero depende de la definición de uno. – Svend

+0

Dado que OP dijo "recursivo-only" y la forma común de hacer iteración en el ensamblado son los saltos, no la recursividad, diría que esto no cuenta. – sepp2k

+0

Ok, podría estar de acuerdo, esto es más bien una cuestión de redacción. Los saltos condicionales son "construcciones de ramificación" y mientras puedas saltar "hacia atrás" podría ser un ciclo. –

4

Erlang no tiene construcciones de bucle. Usas recursion en su lugar.

2

Prolog y otros logic programming languages.

Como un lado, ¿no se reduce esta pregunta más o menos al paradigma de programación? Los lenguajes imperativos tienen constructos de bucle; otros no tienen.

Editar: lenguaje diseñado específicamente para hacer que sacarte los ojos, como

5

Functional programming idiomas (por ejemplo, Haskell, Erlang) en general no tienen bucles, ni function-level idiomas (por ejemplo PF, J) o logic idiomas (por ejemplo Prolog, Planner). De hecho, casi todo el grupo de declarative idiomas (de los cuales funcional, nivel de función, lógica, etc. son un subconjunto) tienden a no tener construcciones de bucle.

Pero ...

Dicho muchos de los que tienen formas de hacer lo mismo que un bucle explícito. Common Lisp, por ejemplo, tiene macros que le dan la capacidad de hacer lo que parece regular para, while, etc. bucles por macro truco detrás de las escenas. Dylan (un Lisp muy poco Lisplike) va un paso más allá y eleva tales macros en algo que es efectivamente parte del lenguaje (aunque la semántica todavía se puede definir en términos de recurrencia y macros). Demasiado, las operaciones comunes en lenguajes funcionales como cremalleras, mapas, pliegues, tomas, etc. son funciones de nivel superior que enmascaran la recursión explícita detrás de una llamada de función y actúan de muchas maneras como construcciones de bucle ordenadas.

Cuestiones relacionadas