スポンサーサイト

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

F#入門第17回(リストの生成(2)と分解)

今日のお題は「リストの生成(2)と分解」です。
 
まずは宿題の答えから
宿題
範囲式およびリスト内包表現の二通りの方法で、1から99までの奇数のリストを生成してください。
 
(1)範囲式を使った方法
 
[1..2..99]
 
(2)リスト内包表現を使った方法
 
[
        for i in 1 .. 100 do
            if i % 2 = 1 then 
                yield i
    ]
    
それでは、まずは、要素とリストが与えられたときに、要素をリストに加えたリストの作り方です。
(要素は先頭に挿入する形になります。)
 
> 3 :: [4;5];;
val it : int list = [3; 4; 5]
 
>1::[];;
val it : int list = [1]
 
これをパターンマッチにつかうこともできます。
 
> let hd::tl = [3;4;5];;
val tl : int list = [4; 5]
val hd : int = 3
 
> let hd::tl = [1];;
val tl : int list = []
val hd : int = 1
 
上の例では警告がでますが、とりあえずは気にしないでください。
 
 
上のように、リストを先頭の要素(ヘッダと呼びます)と 残りのリスト(テイルと呼びます)に、リストを扱う時の常套手段ですので、覚えておいてください。
よく使うので、ヘッダをとりだす関数List.hdとテイルを取り出す関数List.tlまであります。
 
> List.hd [1;2;3;4];;
val it : int = 1
 
> List.tl [1;2;3;4];;
val it : int list = [2; 3; 4]
 
3つ一緒に先頭に挿入することもできます。
 
> 1::2::3::[4;5];;
val it : int list = [1; 2; 3; 4; 5]
 
この形でパターンマッチもできます。(警告がでますが、今は気にしないでください。)
 
>let a::b::c::tl = [1;2;3;4;5];;
val tl : int list = [4; 5]
val c : int = 3
val b : int = 2
val a : int = 1
 
ここまでは、先頭への要素の挿入でしたが、次はリスト同士の連結です。
 
> [1;2] @ [3;4];;
val it : int list = [1; 2; 3; 4]
 
これも関数としても用意されています。
 
> List.append [1;2] [3;4];;
val it : int list = [1; 2; 3; 4]
 
ただ、リストの連結は、先頭への要素の挿入に比べコストが高いので、注意しましょう。
 
宿題です。次のパターンマッチでそれぞれxに何が束縛されるでしょうか?
(エラーがでるときはエラーと答えてください。)
 
(1) let x :: a = [5;4;3;2;1]
 
(2) let x :: b = [2]
 
(3) let c :: x = [2]
 
(4) let x :: d = []
 
(5) let x @ e = [1;2] 
スポンサーサイト

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

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

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

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

この人とブロともになる

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