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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top