2011-01-04 10 views

Respuesta

10

: es el operador "contras" y construye una nueva lista cuya cabeza es el valor a la izquierda del operador y cuya cola es el valor a la derecha del operador. Por lo tanto, 0 : [1, 2, 3] es la lista [0, 1, 2, 3].

comprobar el comportamiento de esta función, mediante la evaluación de f 1 0 como sigue:

f 1 0 = 0 : f 3 1 

es decir f 1 0 es el resultado de la creación de una nueva lista que consiste en 0 a la cabeza y la lista devuelta por f 3 1 como su cola. Del mismo modo, f 3 1 es como sigue:

f 3 1 = 1 : f 5 4 

es decir f 3 1 es el resultado de la creación de una nueva lista que consiste en 1 a la cabeza y la lista devuelta por f 5 4 como su cola.

Por lo tanto, la función crea recursivamente una lista. Además, es infinitamente recursivo de cola (ya que no tiene una condición de terminación) y dará como resultado una lista infinitamente larga.

cuanto a la línea inicial, f :: Integer -> Integer -> [Integer], esto indica que f es una función que toma dos números enteros (Integer -> Integer) y devuelve una lista de números enteros ([Integer]). Estrictamente hablando, f toma un número entero (Integer) y devuelve otra función que toma un número entero y devuelve una lista de enteros (Integer -> [Integer]) como resultado de la función de currying. Este es un concepto con el que se familiarizará cuando ingrese a Haskell y a otros lenguajes de programación funcionales con mayor profundidad.

5

El código en su pregunta no hace nada porque contiene un error de tipo y un error de sintaxis.

f :: Integer -> Integer --> [Integer] 

Como se puede ver en la que destaca el último bit es un comentario porque -- comienza un comentario en Haskell. Como consecuencia, el tipo declarado de f es Integer -> Integer, lo cual es incorrecto. Para arreglar este cambio, --> a ->.

f i n = n : f (i+2) (n+i] 

Aquí tienes una abertura ( y luego un cierre ]. Obviamente eso está mal. Para arreglar este cambio, (n+i] a (n+i).

Ahora que eso que se han hecho, esto es lo que hace el código fijo:

: es un constructor para el tipo de lista. x : xs es la lista que tiene x como su cabeza y xs como su cola. n : f (i+2) (n+i) se analiza como n : (f (i+2) (n+i)) (no (n : f) (i+2) (n+1) como parece creer). Por lo tanto, crea una lista cuya cabeza es n y su cola es el resultado de f (i+2) (n+1).

Cuestiones relacionadas