2009-07-21 10 views
12

Sono sicuro di unirmi a molti per il fatto di essere felice che ci sia finalmente un linguaggio potente legato strettamente a un framework GUI/database/comunicazione mainstream.Se gli operatori di Ascii sono definibili, perché non i simboli Unicode?

Non sono sicuro di dove postare questo, ma qui sembra il posto migliore.

Ho bisogno di utilizzare i caratteri simbolo Unicode come operatori o come nomi di funzioni. Mi piacerebbe lo zucchero sintattico, ma non ne ho bisogno.

Guy Steele ha sottolineato nella comunicazione dell'ACM che "*" è stata una scelta forzata quando è stata adottata da Ascii come moltiplica, ma il mio software funziona in Unicode, quindi non sono più legato ad Ascii.

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

Parte della localizzazione comprende programmatori locali?. Perché limitare l'insieme di operatori che possono essere definiti in F #? Non è ortogonale all'accettazione di molti Unicode IsLetter negli identificatori di C# e F #.

Inoltre, F # è probabile che venga utilizzato per la manipolazione simbolica di problemi di logica, matematica, fisici, ecc. Rende il lavoro molto più semplice se esiste una mappatura diretta nella lingua degli operatori di base. (F # e C# accettano molti Unicode IsLetter? Oltre a IsDigit '? Questa è una richiesta per consentire Unicode IsSymbol? Come operatori con la precedenza di, per esempio, *, o, poiché "+" è sia un operatore unario che binario, Potrei sopportare la precedenza di + e fare la differenza con i raggruppamenti parentesi

Considerare le esigenze specifiche del dominio di logici, matematici, fisici, ecc. Preferisco scrivere un differenziatore o un integratore simbolico usando i simboli matematici di permutazioni Ascii di operatori già intraprese

  • Logic:. ∀ ∃ ⇒
  • Math: Σ ∫ ∂
  • teoria Gruppo: ≤ ≥ ∈ ∉
  • teoria degli insiemi: ⊆ ⊇ ⊃ ∪ ∩
  • tensori: ⊗

ho scritto molte lingue in altre lingue, ma perché F # è strettamente .Net- integrato, questo problema pone sfide speciali senza supporto linguistico:

È banale impilare un traduttore che prende l'origine F # dell'operatore Unicode e lo mappa, riga per riga, sull'origine F # dell'operatore Ascii.

Ma quando eseguo il debug, come posso assicurarmi che il programmatore veda ancora la loro sorgente non tradotta? E che possono vedere valori variabili.

Gli operatori e li converte è banale. Ma come faccio a garantire che la traduzione sia quella che viene compilata, mentre il programmatore vede la propria fonte? Se eseguo il mapping line-for-line correttamente, come posso assicurarmi che possano ancora puntare a una variabile e vedere il suo valore?

+0

Ho aggiunto il # tag f, ma per farlo ho dovuto sbarazzarsi del tag matematica. Penso che sia un commercio equo (il problema principale qui è qualcosa di cui le persone f # possono ora, piuttosto che qualcosa per i matematici a riflettere) – tialaramex

+3

Vedere anche http://cs.hubfs.net/forums/thread/9690.aspx – Brian

risposta

1

Altre lingue, come ad esempio Scala, fare gli operatori permesso dal di fuori del campo ASCII - simboli matematici (SM) e altri simboli (So)

1

Potreste essere interessati a Project Fortress che è un nuovo linguaggio di programmazione funzionale che abbraccia il set di caratteri Unicode (tra molte altre caratteristiche). In particolare, vedere la pagina Mathematical Syntax in Fortress che contiene alcuni esempi di codice.

+0

Il mio interesse è forte in F # perché .Net può essere usato per creare qualsiasi applicazione che non ha bisogno di prestazioni in C++. E la Fortezza del Progetto sembra interessante. Grazie. –

2

C'è un'estensione simbolo matematico (Unicode) per F # disponibile in Visual Studio Gallery.

Questo consente di definire i simboli Unicode, ad es .:

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

let total = ∑myList 
Problemi correlati