2016-05-18 20 views
5

L'operatore cons (::) è una parte fondamentale di 1) scrivere le funzioni della lista ricorsiva in OCaml e lingue simili e 2) la corrispondenza degli schemi negli elenchi. Tuttavia, non riesco a trovare nulla nella documentazione di Reason riguardante contro, e nel REPL, questo genera un errore:Dove sono i contro di Reason (: :) operatore?

Reason # let myList = [2, 3, 4]; 
let myList : list int = [2, 3, 4] 
Reason # 1 :: myList; 
Error: Syntax error 

Esiste un sostituto per l'operatore contro?

+0

Qual è la ragione? Non ne ho sentito parlare e non riesco a trovare nulla su Google. –

+0

http://facebook.github.io/reason/ – jayelm

+0

TIL. Grazie! Mi piacerebbe vedere un tag wiki sulla lingua. –

risposta

9

Ah, è alias come l'operatore "lista immutabile append" in di Reason list of primitives:

OCaml:

1 :: 2 :: myList 
1 :: 2 :: [3, 4, 5] 

Motivo:

[1, 2, ...myList] 
[1, 2, ...[3, 4, 5]] 

Stranamente, almeno nella versione attuale (0.0.6) è possibile utilizzare entrambe le sintassi durante la corrispondenza del modello:

let head = fun lst => switch lst { 
    | [] => failwith "Empty list" 
    | [hd, ...tl] => hd 
}; 

let head = fun lst => switch lst { 
    | [] => failwith "Empty list" 
    | hd::tl => hd 
};