スポンサーサイト

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

F#入門第16回(リストの定義と生成(1))

今回のお題は「リストの定義と生成(1)」です。
 
まずは宿題の答えから
 
('c',7L,(8,"yes"),2)の型を答えてください。

また、それぞれxが束縛される値を答えてください。

答え char * int64 * (int * string) * int  型
 
(1)let (a,b,(x,c),d) = ('c',7L,(8,"yes"),2)
    (答え)8
 
(2)let (a,b,x,d) = ('c',7L,(8,"yes"),2)
    (答え)(8,"yes")
 
(3)let (a,x,b,d) = ('c',7L,(8,"yes"),2)
    (答え)7L
 
(4)let x = ('c',7L,(8,"yes"),2)
    (答え)('c',7L,(8,"yes"),2)
    
さて、前回、いくつかの値を入れる容器としてのタプルを復習しましたが、タプルというものは、全要素数が決まった、ある程度要素数の少ない場合に適した容器でした。
今回は、多くの要素を入れておける値の容器であるリストを紹介します。
タプルとリストはF#における2大容器です。
まず、注意ですが、リストという容器には同一種類の型の値しか入れておくことができません。
それでは、リストの例です。
 
int型のリスト
 
> [1;2;3;4;5];;
val it : int list = [1; 2; 3; 4; 5]
 
char 型のリスト
 
> ['c';'a';'d'];;
val it : char list = ['c'; 'a'; 'd']
 
int -> int 型の関数のリスト
 
> [(fun x -> x + 1);(fun x -> x + 2);(fun x -> x + 3)];;
val it : (int -> int) list = [<fun:it@6>; <fun:it@6-1>; <fun:it@6-2>]
 
(int * int64) 型のタプルのリスト
 
> [(1,2L);(2,5L);(3,9L)];;
val it : (int * int64) list = [(1, 2L); (2, 5L); (3, 9L)]
 
このようにリストの定義は[]の間に要素を;で区切って並べます。
 
要素数0のリストも定義できます。(空リスト(empty list)といいます。)
> [];;
val it : 'a list = []
空のリストからは、型推論できないので、なんかわからないけどなんかの型ということで'a型のリストとなるので 'a list 型と表示されます。
 
次のように範囲を指定して生成することもできます。範囲式(range expression)といいます。

 
> [1 .. 10];;
val it : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
 
間にいくらずつ増えるかを指定して生成することもできます。
 
> [20L .. -5L .. -10L];;
val it : int64 list = [20L; 15L; 10L; 5L; 0L; -5L; -10L]
 
また、[]の中にコードを書いて、リストを生成することもできます。
これを、リスト内包表現(List Comprehension)といいます。
これについては、色々な書き方があるのですが、一番応用のきくと思われる、yieldキーワードを用いた方法を紹介したいと思います。(yieldはもともと「産出する」という意味の英単語です。)
 

 
> [
       yield 3
       yield 1
    ];;
 
val it : int list = [3; 1]
 
[]の中で、yieldはunit型を返す関数風のふるまいするので、else節なしの、if 式も使えたりしますし、for 文が使えたりします。
 

 
> [
        for i in 1 .. 10 do
            if i % 2 = 0 then 
                yield ( 2 * i + 3)
    ];;
 
val it : int list = [7; 11; 15; 19; 23]
 
宿題
範囲式およびリスト内包表現の二通りの方法で、1から99までの奇数のリストを生成してください。

スポンサーサイト

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

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

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

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

この人とブロともになる

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