スポンサーサイト

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

F#入門第18回(リストを引数にとる関数(1))

今日のお題は「リストを引数にとる関数(1)」です。
 
 まずは宿題の答えです。
 次のパターンマッチでそれぞれxに何が束縛されるでしょうか?
 (エラーがでるときはエラーと答えてください。)
 
 (1) let x :: a = [5;4;3;2;1] (答え)5
 
 (2) let x :: b = [2]     (答え) 2
 
 (3) let c :: x = [2]     (答え) []
 
 (4) let x :: d = []      (答え) エラー
 
 (5) let x @ e = [1;2]     (答え) エラー
 
 リスト関連でよく使われる関数を順に紹介したいと思います。
 
  List.rev
 //逆順にしたリストを返します。
 
 > List.rev [1;2;3;4;5];;
 val it : int list = [5; 4; 3; 2; 1]
 
  List.length
 //リストの要素数(長さ)を返します。
 
 > List.length [1;3;5];;
 val it : int = 3
 
 List.zip
 //二つの長さの等しいリストを引数にとり、それぞれの要素のタプルを要素とするリストを返します。
 
 > List.zip [1;2;3] [4;5;6];;
 val it : (int * int) list = [(1, 4); (2, 5); (3, 6)]
 
  List.unzip
 //上の逆です。返り値はリストのタプルとなります。
 
 > List.unzip [(1, 4); (2, 5); (3, 6)];;
 val it : int list * int list = ([1; 2; 3], [4; 5; 6])
 
 さてここからは、引数に関数とリストをとる、関数です。
 
 List.filter
 // 'a 型の要素からなるリストと 'a -> bool 型の関数を引数にとり、この関数をリストのそれぞれの要素に適用し、trueを返す要素だけを集めたリストを返す関数。
 
 > List.filter (fun x -> x >0) [-3;2;-8;5;4;-4];;
 val it : int list = [2; 5; 4]
 
 List.partition
 //上のList.filterとよく似ているが、trueを返す要素だけを集めたリストと、それ以外の要素だけを集めたリストをタプルにして返す関数。
 
 > List.partition (fun x -> x >0) [-3;2;-8;5;4;-4];;
 val it : int list * int list = ([2; 5; 4], [-3; -8; -4])
 
 List.exists
 //'a 型の要素からなるリストと 'a -> bool 型の関数を引数にとり、この関数をリストのそれぞれの要素に適用し、trueを返す要素が一つでもあればtureを返し、一つもなければfalseを返す関数
 
 > List.exists (fun x -> x >0) [-3;2;-8;5;4;-4];;
 val it : bool = true
 
 > List.exists (fun x -> x >0) [-3;-8;-4];;
 val it : bool = false
 
 List.map
 // 'a 型の要素からなるリストと 'a -> bool 型の関数を引数にとり、この関数をリストのそれぞれの要素に適用し、返り値を集めたリストを返す関数(この関数はとてもよく使用されます。)
 List.map
 
 > List.map (fun x -> 2*x) [1;2;3;4;5];;
 val it : int list = [2; 4; 6; 8; 10]
 
 それでは、宿題です。List.filterとList.lengthを用いてList.existsと同じ働きをする関数myListExistsを定義してください。定義は
 let myListExists f list = で始めてください。
スポンサーサイト

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

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

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

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

この人とブロともになる

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