OCaml: lasciare i campi nei record non definiti?
Domanda
Ho questo tipo di record:
type syllable = {onset: consonant list; nucleus: vowel list; coda: consonant list};;
E se volessi creare un'istanza di una sillaba in cui è definito solo il nucleo? Posso dargli un valore predefinito? L'impostazione predefinita è [] o qualcosa del genere?
Soluzione
Penso che sia una migliore idea usare " opzionale " campi.
type syllable = {onset: consonant list option; nucleus: vowel list option; coda: consonant list option};;
In questo modo, puoi definire ciò di cui hai bisogno.
{onset = Some [consonant, consonant, ...],
nucleus = None,
coda = Some [consonant, consonant, consonant, ...]}
Penso che sia la sintassi.
Altri suggerimenti
Solo per rendere più chiara la risposta di newacct, ecco un esempio
let default_syllable = { onset = []; nucleus = []; coda = [] }
let choose_only_nucleus nucleus =
{ default_syllable with nucleus = nucleus }
No, non credo che tu possa lasciare le cose indefinite. I valori non inizializzati causano ogni sorta di problemi in linguaggi come C e quindi vengono evitati in OCaml. (Sebbene ci siano alcune funzioni nella libreria standard che lasciano alcune cose indefinite, come String.create
, non penso che tu possa farlo da solo.)
Dovresti compilare tu stesso tutti i campi (e usare la lista vuota []
o qualcosa del genere per valori che non ti interessano) o usare un valore preesistente di questo tipo e usa la sintassi di aggiornamento dei record per creare un nuovo record con i campi che ti interessano modificati e gli altri copiati dal record preesistente.