standard - Función anónima al curry en SML
sml download (3)
En Standard ML, una función solo puede tener un argumento , así que use
(fn (x,y) => x + y) (2,3)
y el tipo es
fn: int * int -> int
en este tiempo (x, y) y (2,3) es una estructura de lista,
Tengo la siguiente función y funciona:
(fn x => x * 2) 2;
pero este no funciona:
(fn x y => x + y ) 2 3;
puede alguien decirme por que? ¿O dame alguna pista para que funcione?
Las respuestas publicadas anteriormente son correctas. Las funciones SML toman solo un argumento. Como resultado, las funciones SML pueden tener solo uno de dos tipos de entrada:
1) t = (t1 * t2 * ... * tN)
, para algunos N
2) t = a
, para algunos a
.
Así que, técnicamente hablando, SML solo toma tipos de productos o tipos únicos como argumentos a las funciones. En general, se puede pensar en esto como un tipo único o una proyección de algún tipo de producto.
Para tener el curry dentro de funciones anónimas, siéntase libre de anidarlas entre sí como: fn x1 => fn x2 => ... fn xN => ...
Creo que también es importante saber que: fun a = fn x1 => fn x2 => ... fn xN => ...
es la expansión completa del azúcar sintáctica: fun a x1 x2 .. xN
(fn x => fn y => x+y) 2 3;
trabajos. fn
simplemente no tiene el mismo azúcar sintáctico para definir funciones de curry que tiene la fun
.