Quali lingue che non sono solo funzionali hanno dati algebriche tipi (o qualcosa di simile) e pattern matching? Sono anche interessato a linguaggi multi-paradigma - So che OCaml e F # sono dialetti ML con OO aggiunto, in modo che ereditano la tipi di dati algebrici da ML.Tipi di dati algebrici al di fuori delle lingue funzionali?
Possono essere emulati utilizzando enum
se union
s (come in C, C++, ... altro?), Ma questo diventa presto ingombrante e brutto e il compilatore non può avvisarti se si dimentica un caso in pattern matching o (molto più propable, e molto più pericoloso) quando si accede l'unione "in modo sbagliato", cioè si chiede per un campo di un valore Left
quando in realtà è un valore Right
(quello che si ottiene, allora è una reinterpretazione senza significato dei bit che si trovano lì).
Ho sentito dire che Pascal has something like tagged unions e Cyclone language supporta anche i collegamenti codificati. Wikipedia menziona anche Ada e Algol. Altre lingue?
(Nel caso in cui non avete mai sentito parlare di tipi di dati algebrici, è possibile leggere an Answer to "What is 'Pattern Matching' in functional languages?" per un'eccellente introduzione).
Grazie - Non ho idea di linguaggi logici, in modo da propably non avrei imparato questo io stesso. – delnan
Entrambi sono linguaggi di ricerca. La comunità LP ha preso in prestito molto dai suoi cugini FP. –