このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

構文

Coqの構文について思うことをメモしていく。

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