スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門第6回(名前をつける)

今回のお題は「名前をつける(定義する)」です。

値に名前をつけて、使いやすくしてみましょう。
これにはlet構文というのを使います。
書式は let (識別子) = 値 です。
例えばF#Interactiveで

> let a = 3.458255;;と入力すると
val a : float = 3.458255

というように、「float型の識別子aが定義されて3.458255という値になってますよ」と教えてくれます。
さらに、

> let b = a + 1.0;; とすると
val b : float = 4.458255

と、aの値に1.0加えた4.458255という値をbが表すことになります。
このように、どんどん新しい識別子(名前)を導入していくことが、できます。
それでは、ここでb = 2.0とするとどうなるでしょうか?
bが2.0という値を表すことになるのでしょうか?
実験してみます。

> b=2.0;;

val it : bool = false

=記号は等しいか否かのbool値を返す演算士でしたから、これは「bの値と2.0が等しいかどうか」を返しますからfalseが返ってきてしまいます。
では、bの表す値を変えるのにはどうしたらよいのでしょうか。
答えは「できない」です。上のように一度、aやbを定義すると、aやbは他の値に変化させることは、できないのです。
このように、変化させることのできないことをimmutable(不変)といいます。(一方変化させれることをmutableといいます。)
(mutateというのは「変異させる」という意味の言葉で、いわゆる「ミュータント」は、これの派生語です。)
ということで、一度let △=○ と定義してしまうと、△は変化させることができない。つまり○にロックされてしまうのです。
これを「△は○に束縛(bind)される」といいます。(bindはバインダーのbindです。)
一見不自由そうですが、値が変化しないということは、逆にいつでも、安心して使えるということにもつながります。
プログラムを、このようなimmutableな値で構成していくのが「関数型プログラミング」の一つの特徴です。

ところがF#は.NET上で動くこともあり、cなどで用いられる「命令型プログラミング」の手法も用いることができます。
変化させることのできる値を定義するには次のようにします。

> let mutable c = 1.4;;

val mutable c : float = 1.4

(識別子の前にキーワードmutableをつけるのです。)
値を変化させるには、次のようにします。(=を使うとさっきの二の舞です。)

> c <- 1.6;;
val it : unit = ()

> c <- c + 1.0;;
val it : unit = ()

> c;;
val it : float = 2.6

unit = ()については、後日説明します。
まず、しばらくはmutableキーワードなしの、「関数的プログラミング」を紹介していきたいと思います。

ここで、注意ですが、識別子は情報として束縛しているものの型も持つ必要があるのですが、これは一般的には束縛しているもの等から推論して自動的に指定してくれます。(これを型推論といいます。)

ただ、束縛しているものが、複雑になったり、あいまいな場合は自分で指定する必要が出てきます。
例えばnullという値を持てる型は.NETでは一意に決まらないので、nullに対しては型推論で、型を一つに決めることができません。もし、System.String型の識別子にnullを束縛したいときは、次のようにします。

> let s : System.String = null;;
val s : System.String = null

このように、識別子:型 という方法で、型情報を付加することを「型注釈(type annotation)」といいます。

まとめ
let △=○で、値○に△という識別子(名前)をつけることができる。(△というものを定義できる。)
△はずーっと○のままで変化しない。(このとき「△は○に束縛された」という。)
型情報は識別子に対して、大概は自動的に付加される。(これを型推論という。)
自前で、型情報を付加するときは、型注釈を用いる。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。