Las siguientes ecuaciones están escritas en Miranda Syntax, pero debido a las similitudes entre Miranda y Haskell, ¡supongo que los programadores de Haskell deberían entenderlo!Determinación del tipo de una función en Programación funcional
Si define las siguientes funciones:
rc v g i = g (v:i)
rn x = x
rh g = hd (g [])
f [] y = y
f (x:xs) y = f xs (rc x y)
g [] y = y
g (x:xs) y = g xs (x:y)
¿Cómo se calcula el tipo de las funciones? Creo que entiendo cómo resolverlo para f, g y rn, pero estoy confundido acerca de la parte de la aplicación parcial.
rn va a ser * -> * (o cualquier cosa -> nada, yo creo que es un -> a en Haskell)
para F y G, son los tipos de funciones tanto [*] -> * -> *?
No estoy seguro de cómo encontrar los tipos de rc y rh. En rc, g se aplica parcialmente a la variable i, así que supongo que esto limita el tipo de i a ser [*]. ¿Qué orden se aplica rc yg en la definición de rc? ¿Se aplica g a i, y luego la función resultante se usa como argumento para rc? ¿O toma rc 3 parámetros separados de v, g e i? Estoy realmente confundido ... ¡cualquier ayuda sería apreciada! Gracias chicos.
Lo sentimos olvidó añadir que el HD es la función de la cabeza estándar para una lista y se define como:
hd :: [*] -> *
hd (a:x) = a
hd [] = error "hd []"
¿Es esta tarea? –
No, me estoy preparando para los exámenes en este momento y es una vieja pregunta de examen para un examen Miranda. – user1058210
¿Cuál es el tipo de la función 'hd'? –