Piz&Yuminaのプログラミング勉強ノート

最近はプログラミングから脱線気味・・・

目次

Blog 利用状況

ニュース






未だにわんくまのメールが使えないので、連絡は↓にお願いします。 piz_yumina@hotmail.com


Piz&Yumina
名前:Piz&Yumina(ぴずあんどゆみな)
生年月日:1990年02月13日(平成02年02月13日)
年齢:20
性別:♂
血液型:B
星座:水瓶座
趣味:(学習系)数学 英語 (消費系)アニメ ギャルゲー エロゲー (開発系)プログラミング (創作系)小説 詩 短歌 絵 (執筆系)プログラミング・数学分野の記事執筆
TOEIC:685点(2009/09)
簿記:-(学習中)



書庫

日記カテゴリ

CREAプロジェクト

pixiv

雑記ブログ

[F#]識別子について(1)

識別子identifier)とはvalue)や関数function)に付ける名前のようなものです。

C#などの言語では、値を後で参照できるようにその値に適合する型の変数variable)を宣言してその値を代入し保持しておきますが、F#には変数という概念は存在しません。

代わりに、ある値や関数とある識別子とをletキーワードを使って結び付けます。すると、結び付けられた値や関数は識別子を使って参照することができるようになります。

 

では、letキーワードを使って値を識別子に結び付けてみます。

let x = 10

値を識別子に結び付ける場合は、letキーワードの後に識別子を指定し、等号を書き、最後に結び付ける値を書きます。ここでの値は、リテラルでなくとも計算式や関数など値を返すものなら何でも構いません。

let文の中で型名を指定していないことに注意してください。

上の一行をF#インタープリタで実行すると、

val x : int

という結果が返ってきます。

これはxという識別子にint型の値が結び付けられたことを示していますが、明示的にlet文の中で値がint型であることを指定した訳ではありません。F#インタープリタが型を推論してxint型に決定しています。

 

以下に値を識別子に結び付ける例を示します。

let a = 12

let b = 23

let c = a + b

printfn "a = %d, b = %d, c = a + b = %d" a b c

clip_image002

cabの和ですが正しく計算されています。

printfn文で整数を表示する時はフォーマット指定子%dを使います。

 

let a = 12

let b = 23.0

let c = a + b

printfn "a = %d, b = %f, c = a + b = %d" a b c

前のプログラムと殆ど同じですが2箇所だけ違うところがあります。2行目でbには23.0というfloat型の値が結び付けられています。また、識別子bfloat型になるので4行目のprintfnでのフォーマット指定子は%fになります。

上のプログラムは実は正しくありません。これを実行するとエラーが発生します。

clip_image004

エラーメッセージから分かるように、これは3行目でint型の値とfloat型の値を足し算しようとしているためです。F#では異なる型同士の計算はできません。

なので、キャストしてやる必要があります。

let a = 12

let b = 23.0

let c = a + (int)b

printfn "a = %d, b = %f, c = a + b = %d" a b c

 

命令型パラダイム言語の変数を説明する際に、メモリの一区画をイメージした「箱」の例えがよく使われますが、識別子は値を格納する箱とは異なるものです。

識別子自体はただの名前で、「箱」自体ではありません。

F#では、一度定義した識別子の値を変えることはできません。

例えば、次のプログラムを実行すると、23ではなく12と表示されます(エラーにはなりません。この場合の"="は代入演算子ではなく比較演算子と解釈されるからです)。

let x = 12

x = 23

printfn "%d" x

clip_image006

これは、xが箱ではなく名前(識別子)だからです。単なる名前に値を入れることはできません。

なので、F#では一度識別子を値に結び付けると、その状態を変更することはできないということです(但し、mutableキーワードを使うと変数のように値を変更可能な識別子を作ることができます)。

投稿日時 : 2009年1月4日 18:48

コメントを追加

# CREA Playerに関しての質問 2009/02/18 15:50 イージス

Piz&Yuminaさん。CREA Playerに関して質問がありますが、P2Pで動画を共有する機能は搭載されますか?

又「ニコニコ動画」にある機能(コメント機能・ダグ機能)をP2Pで用いて再現する予定はありませんか?

# re: [F#]識別子について(1) 2009/02/19 0:39 Piz&Yumina

コメントありがとうございます。
が、わんくま同盟のブログシステムはどの記事にコメントが付いたか分からないので、コメントされた記事ページを探すのに苦労しましたw。
以後CREAに関する話題は、雑記ブログ「GL(n,R)」(左のリンクから飛べます)でコメントしてくださるとありがたいですm(_ _)m。

>P2Pで動画を共有する機能
今のところ考えていません。
>「ニコニコ動画」にある機能(コメント機能・ダグ機能)をP2Pで用いて再現する予定
その予定です。というより、ずっとP2P版ニコニコ動画を目指して開発を続けています。

なお、細かいことですが、「CREA Player」はプレイヤー単体の名称であって、動画の再生+動画サイトから検索・ダウンロード+P2Pを使ったコメント機能+P2P掲示板+その他の機能をまとめて「CREA」という1本のソフトとしてリリースする予定です。

タイトル  
名前  
URL
コメント