2009-12-18 21 views
18

yo estaba escribiendo la palabra clave "diversión" y luego recordé que no tiene que en C#F #: ¿Es necesaria la palabra clave "divertida"?

¿No sería esto:

List.map (x -> x + 1) [1..10]

ser tan expresiva como esto ?:

List.map (fun x -> x + 1) [1..10]

Esto me da curiosidad por saber por qué la palabra clave "divertida" es necesaria en absoluto. ¿Alguien puede aclarar por qué se requiere sintácticamente la palabra clave "divertida"?

+4

No sé nada de F #, pero encuentro el hecho de que tiene una palabra clave llamada "diversión" ... divertido –

+4

porque codificar en F # es divertido. Es un recordatorio amistoso mientras codifica :) – Russell

+5

¡Si lo sacaran, no habría diversión en f #! En serio, es curioso ya que las lambdas en C# no necesitan la palabra clave. Puede estar allí simplemente para simplificar el análisis. A medida que evolucionan los idiomas, este tipo de cosas tienden a reducirse/hacerse opcionales. –

Respuesta

21

El lenguaje es ambiguo sin él.

let x y = y z -> y z 

¿El x llamada y en la función z -> y z o tiene ignoran su argumento y volver a la función y z -> y z?

+0

hmm buen punto, pero seguramente podría agregar paréntesis para resolver la ambigüedad: "y (z -> y z)"? hmm ... ¿eso terminaría haciendo las cosas más detalladas? – rysama

+8

Pero luego acaba de transformar 'fun' en'() '. C# puede salirse con la suya sin tener una sintaxis especial para lambdas porque tiene una sintaxis más elaborada para empezar. En un lenguaje como F #, no veo cómo puedes moverte usando algún tipo de delimitador para decir "OK, ¡viene lambda!" – Chuck

+2

No creo que esto tenga que ser ambiguo, la mayoría de los lenguajes tienen toneladas de ambigüedad, y hay reglas de precedencia que se usan para 'romper' la ambigüedad. Esto podría ser otro caso similar. – Brian

-1

sé como parte de currificación, (ver este post) puede reemplazar:

let countOneToTen = fun y List.map(fun x -> x + 1) y 
countOneToTen = [1..10] 

con

let countOneToTen y = List.map(fun x -> x + 1) y 
countOneToTen = [1..10] 

sin la palabra clave divertido.

+2

De eso no habla el OP. En su lugar, se preguntan por qué 'diversión x -> x + 1' no puede ser' x -> x + 1'. – bcat

+0

La pregunta es si "la palabra clave 'divertida' es necesaria en absoluto," estaba dando otro ejemplo de dónde se puede usar y se omite según las preferencias del desarrollador. – Russell

+0

Lo sé (y no soy el que te votó negativamente, para ser claro). Aunque sinceramente no sé por qué alguien preferiría la versión que no aprovecha la aplicación parcial. :) – bcat

14

Un montón de respuestas especulativas decente ya ... Voy a añadir a la mezcla:

F # tiene una lengua de la base de que es compatible con OCaml, y OCaml utiliza 'diversión'.

Cuestiones relacionadas