私はこのレコードタイプを持っています:
type syllable = {onset: consonant list; nucleus: vowel list; coda: consonant list};;
核だけが定義されているシラブルをインスタンス化したい場合はどうすればよいですか? デフォルト値を指定できますか? デフォルトは [] またはそのようなものですか?
newacctの答えをより明確にするために、ここに例を示します
let default_syllable = { onset = []; nucleus = []; coda = [] }
let choose_only_nucleus nucleus =
{ default_syllable with nucleus = nucleus }
いいえ、未定義のままにしておくことはできないと思います。初期化されていない値は、C などの言語であらゆる種類の問題を引き起こすため、OCaml では回避されます。(標準ライブラリには、 のように未定義のままになっている関数がいくつかString.create
ありますが、自分でできるとは思いません。)
自分ですべてのフィールドに入力する (そして、[]
気にしない値には空のリストなどを使用する) か、このタイプの既存の値を使用してレコード更新構文を使用して、気になるフィールドが変更された新しいレコード、および既存のレコードからコピーされた他のフィールド。
「オプション」フィールドを使用する方が良いと思います。
type syllable = {onset: consonant list option; nucleus: vowel list option; coda: consonant list option};;
そうすれば、必要なものを定義できます。
{onset = Some [consonant, consonant, ...],
nucleus = None,
coda = Some [consonant, consonant, consonant, ...]}
それが構文だと思います。