構文
Coqの構文について思うことをメモしていく。
- letが1個の変数しか束縛できないことは意外と不便ではない。ブロック囲み記号(特にエンドマーカー)が不要なので入れ子が深くならない。単に代入文を並べている感じになる。
- matchのケースの先頭に余分な '|' を書いてもいいのは便利。
- 一方で、レコードやクラス内で余分なセミコロンが書けないのはものすごく不便。
- 演算子の優先順位でパーズするのは良し悪し。スッキリ書けるが、分かりにくい。
- 区切り記号、囲み記号を使わない構文、括弧は非常に少なくて済むが、付けたほうが見やすい。
- リテラルとしての名前はクォート不要だが、代わりにどれがリテラル(コンストラクタ)か覚えてないといけない。リテラルと関数名の区別はないから合理的とも言えるが、名前がデータという発想はやはり分かりにくい。クォートがあってもよかったと思うが、コンストラクタを関数とみなすことと整合しないか。
- 式言語とコマンド言語の分離は、慣れると分かりやすい。OCamlなどの一体型構文がむしろ不自然に見えてくる。
- コマンドは関数ではないので、Check Check 2 のようには書けない。不便だが、整合性からはしょうがないか。
- パターンマッチのマッチ変数と定数の区別が付かない。これはよろしくない。変数名のコンベンションを設けて自分で対処したほうがいい。