En el chapter about function in the Oz tutorial, se dice que:Cola-recursividad en Oz
similar a los lenguajes funcionales perezosos Oz permite ciertas formas de optimizaciones de cola-recursividad que se no se encuentran en ciertas estrictas lenguajes funcionales incluyendo el estándar ML, Scheme, y el funcional concurrente lenguaje Erlang. Sin embargo, las definiciones de función estándar en Oz no son flojas.
A continuación, pasa a mostrar la siguiente función que es recursiva de cola en Oz:
fun {Map Xs F}
case Xs
of nil then nil
[] X|Xr then {F X}|{Map Xr F}
end
end
Lo que esto hace es, que mapea la lista vacía a la lista vacía y lista no vacía, al resultado de aplicar la función F
a su cabeza y luego anteponerla al resultado de llamar al Map
en la cola. En otros idiomas, esto no sería recursivo de cola, porque la última operación es la llamada previa, no la recursiva al Map
.
Así que mi pregunta es: si "las definiciones de funciones estándar en Oz no son flojas", ¿qué hace Oz que los lenguajes como Scheme o Erlang no pueden (o no) poder realizar la optimización de recursión de cola? para esta función? ¿Y exactamente cuándo es una función recursiva de la cola en Oz?
No sé mucho sobre oz. Por lo que puedo decir, no es muy diferente de lisp. Acabo de jugar un poco con él en los últimos días y tropecé con el hecho de que optimizó las recursiones, que no esperaba. – sepp2k
Solo conozco Oz por leer _Conceptos, técnicas y modelos de Programación de Computadora_ de Peter Van Roy, pero de hecho tiene valores incompletos: se usan ampliamente en la programación simultánea, porque leer un valor incompleto hace que el hilo actual se bloquee. Entonces, la suposición de Pascal es probablemente cómo funciona. (Aquí está el enlace del libro: http://www.info.ucl.ac.be/~pvr/book.html Solía tener una versión borrador en línea, pero la ha eliminado. :() –
As Oz también es un lenguaje lógico, entonces podría tener el concepto de una variable lógica en cuyo caso sería recursivo de cola de la misma manera que para otros lenguajes lógicos como prolog. – rvirding