2012-07-03 9 views
5

¿Por qué el tipo de más (+) se considera int -> int -> int en comparación con (int * int) -> int? Para mí, el segundo tiene sentido porque "acepta" un 2-tuple (los sumandos) y devuelve un solo int (su suma).OCaml tipo del operador plus

¡Gracias!

Respuesta

11

Puede hacer un idioma donde (+) tiene el tipo (int * int) -> int. De hecho, SML funciona exactamente de esta manera. Solo afecta el significado de los operadores de infijo. Sin embargo, las convenciones OCaml favorecen fuertemente el uso de las funciones curried (del tipo a -> b -> c) en lugar de las no cursivas. Un buen resultado es que puedes aplicarlos parcialmente. Por ejemplo, ((+) 7) es una expresión significativa del tipo int -> int. Encuentro esta notación útil con bastante frecuencia.

+1

¿Podría explicar por ((+) 7) es de tipo int-> int? Eso me está confundiendo. ¿Cómo va de int a int? –

+1

La respuesta corta es que es una función que agrega 7 a lo que sea que le des. Es equivalente a 'diversión x -> x + 7'. Para una respuesta más larga, puedo editar mi respuesta anterior si lo desea. –

+0

@JeffreyScofield: bueno, técnicamente, es equivalente a 'diversión x -> 7 + x', pero aquí es lo mismo – newacct

2

Esto puede parecer un poco inútil, pero es porque la función tiene dos argumentos.

Cuando una función toma una tupla, en realidad está tomando un solo argumento.

Dado que (+) es una función en línea, tomar un solo argumento no sería útil, ya que se vería como + (1,2) en comparación con 1 + 2.

Cuestiones relacionadas