Haskellの言語構成要素にもうちょい慣れようか

2012年4月3日火曜日

昨日のエントリ とりあえず始めてみようかHaskell の続き。
昨日の分を要約すると「どんな処理系があるかすらよく分からない状態からスタートして、Macに公式バイナリを一式インストールしてHello Worldまでやったけど学習方法としてはどう考えてもスパルタすぎる策を選んでしまった」という感じ。もうちょい楽な方法で行ったほうが良い気が既にしてるけど、まあムダにはならなさそうなのでしばし続けてみる。

読んでるのは http://www.haskell.org/onlinereport/ の 第2章 。まあ、一応は初学者向けの文書ということなのであまり細部まで突っ込まないように注意しつつ読み進めていこう。ここでは、言語表記の構成要素が淡々と書かれてる。どうせ今しっかり覚えても仕方ないので斜め読み。

uniWhite -> any Unicode character defined as whitespace
だけ気になった。ちゃんとUnicodeのホワイトスペース(超短幅スペースとか)も使えるんだな。多分使わんけど。1行コメントとブロックコメント(ncomment)の書き方がこの時点で分かるのは結構嬉しい。

ncomment->opencom ANYseq {ncomment ANYseq}closecom


ANYseq->{ANY}<{ANY}( opencom | closecom ) {ANY}>
ということで、コメントの入れ子は出来ない言語仕様らしい(<>で括った下付き文字はexceptの意と書いてある)。
いや違う。ncommentはひとつ以上のncommentを含むことが出来ると書かれてるのでネスト出来るんだ。{- {- にゃーん -} -}とかは最後の"-}"まで含めてちゃんとコメントになる一方で"{- {- にゃーん -}"とかすると構文エラーになる。

続き。



ANY->graphic | whitechar
any->graphic | space | tab


ここを分けてる理由は今のところ分からんけど後で分かるのかな。
ここでのsymbolというのは識別子名を意味するのではなく、一部記号を示す区分のことか。ascとついてるのは少しascendantかと思ったけど普通にasciiだった。
その後の説明を読むとANYに含まれないものはHaskellの構文においてそもそも記述出来ないとある。日本語の文字とかはuniSmallとuniLargeに無理やりマップされてるのかなぁ。

さて、続くのは識別子の話(2.4)。シングルクォートが使えるというのに少しびっくりしつつ、先頭が小文字のものは変数識別子で大文字のものはコンストラクタ識別子というのに更に驚く。C#でもフィールドとプロパティを区別するためのconventionとしては似たルールを持ってるけどそんなしっかりとは決めてないなぁと。

_は小文字として扱われるから変数識別子の先頭文字に使えるけど単独で書くとワイルドカードを示す予約済みのパターン識別子を意味するから変数識別子には使えない、というのも地味なハマりポイントかも。ついでに、_で始まる識別子を持つ変数についてはコンパイラでの未使用警告を出さないことが推奨されてるということで、便利に使える一方で厄介ごとの元かもしれない。

んで単独:以外の、:で始まるオペレータシンボルはコンストラクタであると。
この文書、流し読みすると大事な部分落とし過ぎるので流し読み出来ない辛さあるな…。
ThisLexes as this
f.gf . g (three tokens)
F.gF.g (qualified `g')
f..f .. (two tokens)
F..F.. (qualified `.')
F.F . (two tokens)
とあって、それぞれがこのように解釈される理由はちゃんと認識しといたほうがよさげ。ここで小文字のfは変数または型変数にしか成り得ないのでf.g→f . gとなる一方..は予約済みオペレータで最長マッチでトークナイズされるから f..→f ..となる。大文字FはモジュールID(他だとコンストラクタ識別子でもあり得る?)と成り得てF.gはモジュールID込みでのg指定、F..はモジュールID込みでの.指定(f..との違いは、左結合でFがモジュールIDと識別済みであることかな)、F.はF..と違って後シンボルをqualify出来ないのでF .とトークナイズ、っと。慣れるまで結構変なハマりかたしそうだなぁ。

8進数を0o(または0O)と表す言語は初めて見た。



数値の記述方法(2.5)まで読み終わったところで1時間の時間切れ。また続きは今度。
基本的に入門系の諸々は読み飛ばし斜め読みでガンガン進めていくスタイルなんだけど、前述のようにこの文書は飛ばすと完全に分からなくなる感なので油断ならない。

0 件のコメント:

コメントを投稿