スポンサーサイト

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

F#入門14回(if expression (if 式)

今回のお題は「if expression (if 式)」です。
 
まずは宿題の答えから。
それでは宿題です。
次の(*1*)から(*5*)までのそれぞれの場所でアクセス可能な識別子(a,b,c,x,y,z)をすべて答えてください。(関数はなんの意味もない関数です)
 
let a = 1
let test x  =
    (*1*)
    let b = 2
    let sub1 y =
        (*2*)
         y
    let sub2 z =
        (*3*)
         z
    (*4*)
    x 
    
(*5*)
 
答え
(*1*) a x
(*2*) a x b y
(*3*) a x b z
(*4*) a x b
(*5*) a
 
 
プログラムを書いていると、「このような場合は、このような値を返したい、この時にはこのような値を返したい。」というような場合分けの場面によく出くわします。
このときに、F#でよく使かわれるのがif expression(if 式)とパターンマッチです。(パターンマッチについては、後日紹介します。)
 
if 式の基本形はつぎのような形です。
 
if (trueかfalseどちらかの値に評価される式) then
    式1
else
    式2
 
(注意 式1、式2は評価されたとき、同じ型の値を返すものに限ります。)
 
これで、最初の式がtrueに評価されれば、式1が評価されその値がif 式全体の値になり、それ以外の場合は式2が評価された値がif 式全体の値になります。
 

let myAbs x = //絶対値を返す関数myAbs
    if x > 0.0 then //xが正のときには x > 0.0 がtrueと評価されるので
        x           //この値がif式全体の値になる
    else            //それ以外の場合には
        -x          //この値がif式全体の値になる
 
3つ以上の場合にわけるにはif elif else 式をつかうか、if 式をネストします。
もちろん、返る可能性のある値の型はそろっていなくてはなりません。
 
if elif else式を使った例
let yukagen tem =
    if tem > 45.0 then 
        "熱い"
    elif temp > 40.0 then
        "ちょうどいい"
    else
        "ぬるい"
        
実行例
>yukagen 30.0
val it : string = "ぬるい"
 
if式をネストした例
 
let yukagen2 ondo =
    if ondo > 45.0 then 
        "熱い"
    else
        if ondo > 40.0 then
            "ちょうどいい"
        else
            "ぬるい"
            
あと、else部分をもたないif式がありますが、thenの後の式は、評価されてもされた時に、値的に、何の意味ももたない型であるunit型(値としては())を返す関数に限ります。

 
let test k =
    if k > 0 then
        printfn "%A" k //関数printfnは値()を返す関数
        
 
宿題 int型の引数nをとり、もしnが偶数だったら"Yes",奇数だったら"No"という文字列を返す関数isEvenを定義してください。(int型の数nを2で割った余りは中置演算子%を用いてn % 2 で求めることができます。)
スポンサーサイト

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

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

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

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

この人とブロともになる

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