スポンサーサイト

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

F#入門第7回(関数(function))

今回のお題は「関数(function)」です。

関数というのは、何らかの値を材料にして、1つの値を返すものです。
材料を引数、返すものを返り値といいます。
返り値については、なにも返さないものは、unit型の値()を返すとみなします。


>printfn "Hello";;
Hellow
val it : unit = ()


まずは、名前をつけずに関数を定義してみます。

> fun x -> x + 1.2;;
val it : float -> float =

関数を定義するには、funキーワードを使います。
fun の後に仮引数を書き、->を続け、そのあとに返り値を書きます。
上の例では、仮引数がxで、返り値が x + 1.2ですから、引数に対して、1.2加えた値が返り値となります。
F#Interactiveの反応ですが、次の2.5と入力してみたときの反応と比べてみてください。

> 2.5;;
val it : float = 2.5

とても反応が似ています。
2.5の場合は、まずval it(それの値)と来て、そのあとに「型=その値」がというように続いています。
これと同じ文脈で上の関数の例をみると、
val it(それの値)ときて、そのあと続くのがfloat -> float ですから、これがこの関数の型で、=の右が値ですから、というのが(プログラム内部での)値です。(この値は直接使うことはないと思います。どうやって使ったらよいのか私は分かりません。)
float -> floatはfloat型を受け取ってfloat型を返すという意味です。
注意するべきなのは、関数を定義したのに、val itと返答したことです。
つまりF#では関数も値の一種として扱われるのです。

さて、関数を実際に適用するには、関数の後ろに引数を置きます。
さっきと同じ関数を5.0に適応する例は次のようになります。

> (fun x -> x + 1.2) 5.0;;
val it : float = 6.2

この関数はfloatを受け取りfloatを返す関数ですから、int型の数に適用すると、次のように、エラーになります。

> (fun x -> x + 1.2) 5;;

(fun x -> x + 1.2) 5;;
-------------------^

stdin(41,20): error FS0001: The type 'float' does not match the type 'int'


今回のまとめ
関数は fun △ -> ○ で定義できる。
関数を適用するには、関数のあとに、実際の引数を書く。
F#では関数も値である。(関数の引数にしたりできます。)
値のない型をunit型といい、値()をもつとします。

それでは、宿題です。
(1)与えられた数を2乗する関数を5に適用してください。

(2)次はどのような関数を定義しているのでしょう。

fun x -> x > 1

(3)次はどうなるでしょう。

> (fun g -> g 1) (fun x -> x + 2);;

(ヒント)F#では関数も値で、引数にできます。
スポンサーサイト

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

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

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

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

この人とブロともになる

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