2009-07-21 9 views
12

Estoy seguro de que me uno a muchos para alegrarme de que finalmente haya un poderoso lenguaje ligado estrechamente a una GUI/base de datos/marco de comunicación.Si los operadores de Ascii son definibles, ¿por qué no los Símbolos Unicode?

No he estado seguro de dónde publicar esto, pero aquí parece ser el mejor.

Necesito usar caracteres de símbolo Unicode como operadores o como nombres de funciones. Me gustaría el azúcar sintáctico, pero no lo necesito.

Guy Steele señaló en Comunicaciones del ACM que "*" fue una elección forzada cuando se adoptó de Ascii como multiplicado, pero mi software funciona en Unicode, así que ya no estoy atado a Ascii.

$% & * + -/< =>, @^| ~:!.

Parte de localización incluye programadores locales?. ¿Por qué limitar el conjunto de operadores que se pueden definir en F #? No es ortogonal a la aceptación de C# y F # de muchos Unicode IsLetter en identificadores.

Además, es probable que F # se use para la manipulación simbólica de problemas de lógica, matemática, físicos, etc. Hace el trabajo mucho más fácil si hay un mapeo directo en el lenguaje de los operadores básicos. (F # y C# aceptan muchas Unicode IsLetter? Así como IsDigit '? Esta es una solicitud para permitir Unicode IsSymbol? Como operadores con la precedencia de, por ejemplo, *, o, ya que "+" es un operador unario y binario, Podría soportar la precedencia de + y compensar la diferencia con agrupaciones entre paréntesis.

Considere las necesidades específicas del dominio de lógicos, matemáticos, físicos, etc. Prefiero escribir un diferenciador simbólico o integrador usando símbolos matemáticos que en permutas ASCII de los operadores ya tomadas-

  • lógica:. ∀ ∃ ⇒
  • matemática: Σ ∫ ∂
  • La teoría de grupos: Teoría ≤ ≥ ∈ ∉
  • Set: ⊆ ⊇ ⊃ ∪ ∩
  • tensores: ⊗

He escrito muchos idiomas en otros idiomas, sino porque es F # .NET a fuertemente integrado, este problema plantea desafíos especiales sin soporte de idiomas:

Es trivial improvisar un traductor que toma Unicode-operator F # source y lo asigna, línea por línea, a Ascii-operator F # source.

Pero al depurar, ¿cómo me aseguro de que el programador todavía vea su fuente no traducida? Y que pueden ver valores variables.

Operadores y los convierte es trivial. Pero, ¿cómo me aseguro de que la traducción sea la que se compila, mientras el programador ve su propia fuente? Si mapeo línea por línea correctamente, ¿cómo me aseguro de que aún puedan apuntar a una variable y ver su valor?

+0

He añadido la etiqueta # f, pero para ello tenía que deshacerse de la etiqueta de matemáticas. Creo que eso es un comercio justo (el problema central aquí es algo sobre lo que las personas pueden estar ahora, más que algo para que los matemáticos lo ponderen) – tialaramex

+3

Ver también http://cs.hubfs.net/forums/thread/9690.aspx – Brian

Respuesta

1

Otros lenguajes, como Scala, hacer los operadores de permiso desde fuera del rango ASCII - símbolos matemáticos (SM) y otros símbolos (So)

1

Usted puede estar interesado en Project Fortress que es un nuevo lenguaje de programación funcional que adopta el conjunto de caracteres Unicode (entre muchas otras características). En particular, consulte la página Mathematical Syntax in Fortress que contiene algún código de muestra.

+0

Mi interés es fuerte en F # porque .Net se puede usar para crear cualquier aplicación que no necesite el rendimiento de C++. Y Project Fortress suena interesante. Gracias. –

2

No es una extensión de símbolo de la matemáticas (Unicode) para F # disponible en el Visual Studio Gallery.

Esto le permite definir símbolos Unicode, por ejemplo .:

let inline (~∑) xs = xs |> Seq.sum 

let total = ∑myList 
Cuestiones relacionadas