Lo bueno de los lenguajes como Haskell (es muy similar en F #, pero no sé la sintaxis exacta - esto debería ayudarte a entender ->, sin embargo) es que puedes aplicar solo partes del argumento , para crear al curry funciones:
adder n x y = n + x + y
En otras palabras: "dame tres cosas, y voy a sumarlos". Cuando le arrojas números, el compilador inferirá los tipos de n x y y.Supongamos que escribe
adder 1 2 3
El tipo de 1, 2 y 3 es Int. Por lo tanto:
adder :: Int -> Int -> Int -> Int
Eso es, dame tres enteros, y se convertirá en un entero, con el tiempo, o el mismo que decir:
five :: Int
five = 5
Pero, aquí está la parte buena! Prueba esto:
add5 = adder 5
Como recordarán, el sumador toma un int, int, int, y le devuelve un int. Sin embargo, esa no es toda la verdad, como verá pronto. De hecho, add5 tendrá este tipo:
add5 :: Int -> Int -> Int
Será como si ha "despegado" de los números enteros (más a la izquierda), y pegado directamente a la función. Mirando más de cerca a la firma de la función, nos damos cuenta de que el -> son asociativo por la derecha, es decir:
addder :: Int -> (Int -> (Int -> Int))
Esto debería dejar claro: cuando se da el sumador el primer número entero, que va a evaluar a cualquier cosa que esté a la derecho de la primera flecha, o:
add5andtwomore :: Int -> (Int -> Int)
add5andtwomore = adder 5
Ahora puede utilizar add5andtwomore en lugar de "víbora 5". De esta manera, se puede aplicar otro número entero para obtener (por ejemplo) "add5and7andonemore":
add5and7andonemore :: Int -> Int
add5and7andonemore = adder 5 7
Como se ve, add5and7andonemore quiere exactamente otro argumento, y cuando se le da uno, llegará a ser pronto un entero!
> add5and7andonemore 9
=> ((add5andtwomore) 7) 9
=> ((adder 5) 7) 9)
<=> adder 5 7 9
Sustituyendo los parámetros a sumadora (nxy) para (5 7 9), obtenemos:
> adder 5 7 9 = 5 + 7 + 9
=> 5 + 7 + 9
=> 21
De hecho, además también está a una función que toma un entero y le da volver a otro int, por lo que lo anterior es realmente más como:
> 5 + 7 + 9
=> (+ 5 (+ 7 9))
=> (+ 5 16)
=> 21
¡Ya lo tiene!
Todo parece realmente griego para mí también. – Brettski
Solo llámalo Matusalén. –
En realidad, Matusalén vivió durante 969 años, así que todavía tendría un tercio de su edad. Sin embargo, gracias editadas;) – AnthonyWJones