Functional Programming
|
|
|
- たしろう ひろもり
- 7 years ago
- Views:
Transcription
1 PROGRAMMING IN HASKELL プログラミング Haskell Chapter 7 - Higher-Order Functions 高階関数 愛知県立大学情報科学部計算機言語論 ( 山本晋一郎 大久保弘崇 2013 年 ) 講義資料オリジナルは を参照のこと 0
2 Introduction カリー化により 2 引数以上の関数の戻り値は関数となるため 多くの関数が厳密には高階関数である より限定して引数として関数を取る関数という立場も 関数を引数とする または返り値とする関数を高階関数という twice :: (a a) a a twice f x = f (f x) twice は第 1 引数に関数を取るので高階関数 1
3 高階関数は有用か? 高階関数によって広く用いられるプログラミングのイディオムを自然に表現できる 高階関数を用いてドメイン固有言語 (domain specific language, DSL) を定義できる 高階関数の代数的性質はプログラムに関する論証に用いられる 2
4 Map 関数 高階ライブラリ関数 map は 引数として与えられた関数をリストの要素全てに適用する map :: (a b) [a] [b] For example: > map (+1) [1,3,5,7] [2,4,6,8] 3
5 map 関数は リスト内包表記を用いて とても簡潔に定義できる : map f xs = [f x x xs] 別な方法として 主に証明に使うために 再帰を用いても定義できる : map f [] = [] map f (x:xs) = f x : map f xs 4
6 Filter 関数 高階ライブラリ関数 filter は リストから述語を満たす要素だけを選び出す filter :: (a Bool) [a] [a] For example: > filter even [1..10] [2,4,6,8,10] 5
7 filter 関数はリスト内包表記を用いて定義できる : filter p xs = [x x xs, p x] 別な方法として 再帰を用いても定義できる : filter p [] = [] filter p (x:xs) p x = x : filter p xs otherwise = filter p xs 6
8 右畳み込み (foldr) リスト関数の多くは 単純な再帰パターンによって定義される ( 演算子 と初期値 v がパラメータ ): f [] = v f (x:xs) = x f xs f は空リストを初期値 v に写像し 非空リストを ( 先頭要素 ) と ( 残りのリストに f を適用した結果 ) に演算子 を適用した結果に写像する 7
9 For example: sum [] = 0 sum (x:xs) = x + sum xs v = 0 = + product [] = 1 product (x:xs) = x * product xs v = 1 = * and [] = True and (x:xs) = x && and xs v = True = && 8
10 高階ライブラリ関数 foldr (fold right, 右畳み込み ) は 関数 ( ) と初期値 v を引数として この単純な再帰パ ターンを表現する For example: 教科書はポイントフリー ( 引数を明示しない ) スタイルで書かれているので 両辺に引数を補って考える sum xs = foldr (+) 0 xs product xs = foldr (*) 1 xs or xs and xs = foldr ( ) False xs = foldr (&&) True xs 9
11 foldr 自体は再帰を用いて定義できる : foldr :: (a b b) b [a] b foldr f v [] = v foldr f v (x:xs) = f x (foldr f v xs) または foldr f v (x:xs) = x `f` (foldr f v xs) 実際には foldr を再帰的に理解するのではなく リストの cons (:) を演算子 に 終端 [] を初期値 v に 同時に置き換えると理解すべき 第 1, 2 引数は変化しない ( 持ち回される ) 10
12 cons (:) を に 終端 [] を v に置換 foldr ( ) v [x0, x1,..., xn] = foldr ( ) v (x0 : x1 :... : xn : []) = x0 (x1 (... ( xn v))) 11
13 For example: = = = = sum [1,2,3] foldr (+) 0 [1,2,3] foldr (+) 0 (1:(2:(3:[]))) 6 1+(2+(3+0)) Replace each (:) by (+) and [] by 0. 12
14 For example: = = = = product [1,2,3] foldr (*) 1 [1,2,3] foldr (*) 1 (1:(2:(3:[]))) 6 1*(2*(3*1)) Replace each (:) by (*) and [] by 1. 13
15 foldr を用いた他の例 foldr は単純な再帰をパターン化しただけだが 想像以上に多様な関数を定義できる length 関数について考えてみる : length :: [a] Int length [] = 0 length (_:xs) = 1 + length xs 14
16 例えば : = = = length [1,2,3] length (1:(2:(3:[]))) 3 Replace each (:) by _ n 1+n and [] by 0. 1+(1+(1+0)) 従って : length xs = foldr ( _ n 1+n) 0 xs 15
17 _ n 1+n はどうやって求める? length [1, 2, 3] = foldr f v (1 : (2 : (3 : []))) = 1 `f` (2 `f` (3 `f` v)) where v = 0 f x y = 1 + y 注意 : 3 `f` v == f 3 v f 3 v より f x y は要素 3 を x に 初期値 v を y に取って [3] の長さ 1 を返す f 2 (f 3 v) より f x y は要素 2 を x に 残りのリストの長さ 1 を y に取って [2, 3] の長さ 2 を返す f x y は 要素を x に 残りのリストの長さを y に取って y に 1 を加えて返せば良い (v は 0) f x y = 1 + y (x は利用しないので _ で十分 ) 16
18 reverse について考えてみる : reverse [] = [] reverse (x:xs) = reverse xs ++ [x] 例えば : Replace each (:) = = = reverse [1,2,3] reverse (1:(2:(3:[]))) (([] ++ [3]) ++ [2]) ++ [1] [3,2,1] by x xs xs ++ [x] and [] by []. 17
19 従って : reverse xs = foldr ( x xs xs ++ [x]) [] xs 最後に リストの連結 (++) を foldr によって極めて簡潔に定義する : (++) xs ys = foldr (:) ys xs Replace each (:) by (:) and [] by ys. 18
20 x xs xs ++ [x] はどうやって求める? reverse [1,2,3] = foldr f v (1 : (2 : (3 : []))) = 1 `f` (2 `f` (3 `f` v)) where v = [] f x y = y ++ [x] 注意 : 3 `f` v == f 3 v f 3 v より f x y は要素 3 を x に 初期値 v を y に取って [3] の反転 [3] を返す f 2 (f 3 v) より f x y は要素 2 を x に 残りのリストの反転 [3] を y に取って [2,3] の反転 [3,2] を返す f x y は 要素を x に 残りのリストの反転を y に取って y の後ろに [x] を結合したリストを返せば良い (v は []) f x y = y ++ [x] 19
21 reverse の補足 要素をリストの末尾に追加する関数 snoc を導入 snoc x xs = xs ++ [x] reverse [1,2,3] = r (1 : (2 : (3 : []))) = 1 `snoc` (2 `snoc` (3 `snoc` [])) = (([] ++ [3]) ++ [2]) ++ [1] = [] ++ [3] ++ [2] ++ [1] = [3,2,1] snoc == x xs xs ++ [x] 20
22 従って : reverse xs = foldr ( x xs xs ++ [x]) [] xs 最後に リストの連結 (++) を foldr によって極めて簡潔に定義する : (++) xs ys = foldr (:) ys xs Replace each (:) by (:) and [] by ys. 21
23 append を foldr によって表現 22
24 foldr は有用か? sum のようなリスト関数をより簡潔に定義できる foldr を用いて定義された関数の性質は foldr の代数的性質 (fusion や banana split 規則 ) を用いて証明できる 明示的な再帰の代わりに foldr を用いると 高度なプログラムの最適化が容易になる 23
25 foldr ( 右畳み込み ) のまとめ f [] = v f (x:xs) = x f xs と定義される関数 f xs は foldr ( ) v xs と書ける foldr ( ) v [x0, x1,..., xn] = x0 (x1 (... (xn v))) sum xs = foldr (+) 0 xs product xs = foldr (*) 1 xs and xs = foldr (&&) True xs 24
26 ここから foldl の説明が始まるが foldr を初めて学んだ人は後回しにしても良い 25
27 左畳み込み (foldl) リスト関数の多くは 単純な再帰パターンによって定義される ( 演算子 と蓄積変数の初期値 v がパラメータ ): f xs = f v xs f ac [] = ac f ac (x:xs) = f (ac x) xs f : f の補助関数 ac: それまで処理した中間結果を保持する蓄積変数 f は 空リストを蓄積変数の値に 非空リストを ( 蓄積変数と先頭要素に を適用した結果 ) と ( 残りのリスト ) に f を適用した結果に写像する 26
28 For example: sum xs = sum 0 xs sum ac [] = ac sum ac (x:xs) = sum (ac+x) xs v = 0 = + product xs = prod 1 xs prod ac [] = ac prod ac (x:xs) = prod (ac*x) xs v = 1 = * rev xs = rev' [] xs rev' ac [] = ac rev' ac (x:xs) = rev' (x:ac) xs v = [] = ys y -> y:ys 27
29 高階ライブラリ関数 foldl (fold left, 左畳み込み ) は 関数 ( ) と蓄積変数の初期値 v を引数として この単純な再帰パターンを表現する For example: sum xs = foldl (+) 0 xs product xs = foldl (*) 1 xs reverse xs = foldl ( ys y -> y:ys) [] xs 28
30 foldl 自体は再帰を用いて定義できる : foldl :: (a b a) a [b] a foldl f ac [] = ac foldl f ac (x:xs) = foldl f (f ac x) xs または foldl f ac (x:xs) = foldl f (ac `f` x) xs 実際には foldl を再帰的に理解するのではなく 蓄積変数の初期値を v とし 左結合の演算子 を用いてリストから式を構成すると理解すべき 蓄積変数 ac に結果を蓄えていき 最後にその値を返す 第 1 引数は変化しない ( 持ち回される ) 29
31 蓄積変数の初期値を v とし 左結合の を用いてリストから式を構成 foldl ( ) v [x0, x1,..., xn] = foldl ( ) v (x0 : x1... : xn : []) = (((v x0) x1)...) xn 30
32 For example: = = = = sum [1,2,3] foldl (+) 0 [1,2,3] foldl (+) 0 (1:(2:(3:[]))) 6 ((0+1)+2)+3 リストの前に蓄積変数の初期値 0 を置いて (+) で左から演算する 31
33 For example: = = = = product [1,2,3] foldl (*) 1 [1,2,3] foldl (*) 1 (1:(2:(3:[]))) 6 ((1*1)*2)*3 リストの前に蓄積変数の初期値 1 を置いて (*) で左から演算する 32
34 reverse を foldl を用いて実現 rev [1,2,3] = foldl ( ys y -> y:ys) [] [1,2,3] = foldl ( ) (( ) [] 1) [2,3] = foldl ( ) (1:[]) [2,3] = foldl ( ) (( ) [1] 2) [3] = foldl ( ) (2:[1]) [3] = foldl ( ) (( ) [2,1] 3) [] = foldl ( ) (3:[2,1]) [] = [3,2,1] 蓄積変数 ys には 既に処理した前方のリストを反転した結果が渡される 33
35 ys y -> y:ys はどうやって求める? reverse [1,2,3] = foldl f v (1 : (2 : (3 : []))) = ((v `f` 1) `f` 2) `f` 3 where v = [] f x y = y:x 注意 : v `f` 1 == f v 1 f v 1 より f x y は初期値 v を x に 要素 1 を y に取って [1] の反転 [1] を返す f (f v 1) 2 より f x y は前方のリストの反転 [1] を x に 要素 2 を y に取って [1,2] の反転 [2,1] を返す f x y は 前方のリストの反転を x に 要素を y に取って x の前に y を cons したリストを返せば良い (v は []) f x y = y:x 34
36 foldl ( 左畳み込み ) のまとめ f xs = f v xs f ac [] = ac f ac (x:xs) = f (ac x) xs と定義される関数 f xs は foldl ( ) v xs と書ける 空リストを蓄積変数の値に 非空リストを ( 蓄積変数と先頭要素に を適用した結果 ) と ( 残りのリスト ) を f に適用した結果に写像 foldl ( ) v [x0, x1,..., xn] = (((v x0) x1)...) xn reverse xs = foldl ( ys y -> y:ys) [] xs 35
37 foldl の説明終わり 36
38 その他の高階ライブラリ関数 高階ライブラリ関数 (.) は 2 つの関数を合成した関数を返す (.) :: (b c) (a b) (a c) f. g = x f (g x) For example: odd :: Int Bool odd = not. even odd = not. even odd = x not (even x) odd n = (not. even) n odd n = not (even n) odd n = not $ even n 37
39 高階ライブラリ関数 all は リストの全ての要素が与えられた述語を満たすか判定する all :: (a Bool) [a] Bool all p xs = and [p x x xs] For example: > all even [2,4,6,8,10] True 38
40 all と双対な高階ライブラリ関数 any は リストの要素の少なくとも 1 つが与えられた述語を満たすか判定する any :: (a Bool) [a] Bool any p xs = or [p x x xs] For example: > any isspace "abc def" True 39
41 高階ライブラリ関数 takewhile は リストの先頭から述語を満たす区間を取り出したリストを返す takewhile :: (a Bool) [a] [a] takewhile p [] = [] takewhile p (x:xs) p x = x : takewhile p xs otherwise = [] For example: > takewhile isalpha "abc def" "abc" 40
42 takewhile と双対な高階ライブラリ関数 dropwhile は リストの先頭から述語を満たす区間を除いたリストを返す dropwhile :: (a Bool) [a] [a] dropwhile p [] = [] dropwhile p (x:xs) p x = dropwhile p xs otherwise = x:xs For example: > dropwhile isspace " abc" "abc" 41
43 まとめ (7 章 ) 高階関数 : 関数を引数 または返り値とする関数 map: 与えられた関数をリストの要素全てに適用 filter: リストから述語を満たす要素を選び出す foldr: 右畳み込み foldr ( ) v [x0, x1,..., xn] = x0 (x1 (... (xn v))) sum xs = foldr (+) 0 xs product xs = foldr (*) 1 xs and xs = foldr (&&) True xs (.): 関数合成 f. g = x f (g x) all: リストの全ての要素が述語を満たすか判定 takewhile: リストの先頭から述語を満たす区間を取り出す 42
44 まとめ (foldr と foldl) 先頭要素は最外 v は最内右 foldr は結果の中へ foldr (+) 0 (1:(2:(3:[]))) = 1 + (foldr (+) 0 (2:(3:[]))) = 1 + (2 + (foldr (+) 0 (3:[]))) = 1 + (2 + (3 + (foldr (+) 0 []))) = 1 + (2 + (3 + 0)) = 6 先頭要素は最内 v は最内左 結果は foldl の蓄積変数へ foldl (+) 0 (1:(2:(3:[]))) = foldl (+) (0 + 1) (2:(3:[])) = foldl (+) ((0 + 1) + 2) (3:[]) = foldl (+) (((0 + 1) + 2) + 3) [] = ((0 + 1) + 2) + 3 = 6 43
第8回 関数
1 関数型プログラミング 第 8 回関数 萩野達也 [email protected] 2 関数定義 square n = n * n 与えられた数の 2 乗を計算する square 関数を定義している. 変数 square に 2 乗を計算する関数を束縛 (bind) したい. a = 10 変数 a に定数 10 を束縛する. square =... 3 高階関数 関数も値の一つである.
Microsoft PowerPoint - 講義補助資料2017.pptx
66 SQL 最も標準的なリレーショナルデータベースの言語 ISO による国際標準規格であり特定の企業に依存しない SQL の規格 :SQL89(SQL1), SQL92(SQL2), SQL:1999(SQL3), SQL:2003, SQL:2006, SQL:2008, SQL:2011 標準規格としての SQL は 何かの略語ではない と規定されている ( 参考 : IBM 社の製品で使われている
「計算と論理」 Software Foundations その4
Software Foundations 4 [email protected] http://www.fos.kuis.kyoto-u.ac.jp/~igarashi/class/cal/ November 7, 2017 ( ) ( 4) November 7, 2017 1 / 51 Poly.v ( ) ( 4) November 7, 2017 2 / 51 : (
Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕
Java Script プログラミング入門 3-6~3-7 茨城大学工学部情報工学科 08T4018Y 小幡智裕 3-6 組み込み関数 組み込み関数とは JavaScript の内部にあらかじめ用意されている関数のこと ユーザ定義の関数と同様に 関数名のみで呼び出すことができる 3-6-1 文字列を式として評価する関数 eval() 関数 引数 : string 式として評価する文字列 戻り値 :
文字列操作と正規表現
文字列操作と正規表現 オブジェクト指向プログラミング特論 2018 年度只木進一 : 工学系研究科 2 文字列と文字列クラス 0 個以上の長さの文字の列 Java では String クラス 操作 文字列を作る 連結する 文字列中に文字列を探す 文字列中の文字列を置き換える 部分文字列を得る 3 String クラス 文字列を保持するクラス 文字列は定数であることに注意 比較に注意 == : オブジェクトとしての同等性
fp.gby
1 1 2 2 3 2 4 5 6 7 8 9 10 11 Haskell 12 13 Haskell 14 15 ( ) 16 ) 30 17 static 18 (IORef) 19 20 OK NG 21 Haskell (+) :: Num a => a -> a -> a sort :: Ord a => [a] -> [a] delete :: Eq a => a -> [a] -> [a]
PowerPoint プレゼンテーション
コンパイラとプログラミング言語 第 3 4 週 プログラミング言語の形式的な記述 2014 年 4 月 23 日 金岡晃 授業計画 第 1 週 (4/9) コンパイラの概要 第 8 週 (5/28) 下向き構文解析 / 構文解析プログラム 第 2 週 (4/16) コンパイラの構成 第 9 週 (6/4) 中間表現と意味解析 第 3 週 (4/23) プログラミング言語の形式的な記述 第 10 週
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,
オートマトン 形式言語及び演習 1 有限オートマトンとは 酒井正彦 wwwtrscssinagoya-uacjp/~sakai/lecture/automata/ 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110, } 形式言語 : 数学モデルに基づいて定義された言語 認識機械 : 文字列が該当言語に属するか? 文字列 機械 受理
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (
Microsoft PowerPoint - db03-5.ppt
データベース言語 SQL リレーショナルデータモデルにおけるデータ操作言語 : リレーショナル代数 少なくともリレーショナル代数と同等のデータ検索能力をもつときリレーショナル完備という. リレーショナル代数はユーザフレンドリではない. 自然な英文による質問の表現が必要になる. リレーショナルデータベース言語 SQL 英文による簡単な構文 リレーショナル代数でできない, 合計, 平均, 最大などの計算機能の組み込み.
haskell.gby
Haskell 1 2 3 Haskell ( ) 4 Haskell Lisper 5 Haskell = Haskell 6 Haskell Haskell... 7 qsort [8,2,5,1] [1,2,5,8] "Hello, " ++ "world!" "Hello, world!" 1 + 2 div 8 2 (+) 1 2 8 div 2 3 4 map even [1,2,3,4]
Microsoft PowerPoint - lectureNote13.ppt
i217 関数プログラミング第 13 回プログラム検証 2 二木厚吉 緒方和博 計算機による検証支援 SML のプログラム ( 関数 ) の性質を帰納法等により明らかにすることは可能である. つまり プログラムを検証 ( プログラムが望ましい性質を満たすことを証明 ) することは可能である. ただし SML の処理系は 検証 ( あるいは証明 ) を支援しない. 検証を支援するための計算機言語やツールがある.
プログラミング基礎I(再)
山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全
Microsoft PowerPoint pptx
データベース 第 11 回 (2009 年 11 月 27 日 ) テーブル結合と集計 ( 演習 ) 第 11 回のテーマ 前回より シラバスから離れ 進捗状況に合わせて全体構成を変更しています テーマ1: テーブルの結合 テーマ 2: 結合した結果からの様々な検索 テーマ3: 集計の方法 今日学ぶべきことがら Select 文のさまざまな表現 Natural join sum(*) orrder
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include 2. #include /*troupper,islower,isupper,tolowerを使うため宣言*/ 3. 4. int get_n(char *); 5. void replace(char
プログラミング実習I
プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 [email protected] 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,
/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){
ソフトゼミ A 第 6 回 関数 プログラムは関数の組み合わせでできています 今までのゼミAでも printf や scanf など様々な関数を使ってきましたが なんと関数は自分で作ることもできるのです!! 今日は自作関数を中心に扱っていきます ゲーム制作でも自作関数は避けては通れないので頑張りましょう そもそもまず 関数とは 基本的には 受け取った値に関数によって定められた操作をして その結果の値を返す
Microsoft PowerPoint - CproNt02.ppt [互換モード]
第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント
monad.gby
2012.11.18 1 1 2 2 DSL 3 4 Q) A) 5 Q) A) 6 7 8 Haskell 9 10 Parser data Parser a = Parser (String -> [(a,string)]) Parser pwrap :: a -> Parser a pwrap v = Parser $ \inp -> [(v,inp)] Parser pbind :: Parser
Microsoft PowerPoint - chap10_OOP.ppt
プログラミング講義 Chapter 10: オブジェクト指向プログラミング (Object-Oriented Programming=OOP) の入り口の入り口の入り口 秋山英三 F1027 1 例 : 部屋のデータを扱う // Test.java の内容 public class Test { public static void main(string[] args) { double length1,
(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド
メソッド ( 教科書第 7 章 p.221~p.239) ここまでには文字列を表示する System.out.print() やキーボードから整数を入力する stdin.nextint() などを用いてプログラムを作成してきた これらはメソッドと呼ばれるプログラムを構成する部品である メソッドとは Java や C++ などのオブジェクト指向プログラミング言語で利用されている概念であり 他の言語での関数やサブルーチンに相当するが
プログラミング実習I
プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 [email protected] 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.
PowerPoint プレゼンテーション
プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体
gengo1-11
関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i
Microsoft PowerPoint - 5Chap15.ppt
第 15 章文字列処理 今日のポイント 15.1 文字列処理の基本 strcpy strcat strlen strchr などの使い方をマスターする strcpy はなんて読むの? 普通はストリングコピー C のキーワードの読み方に悩んだら下記サイトを参考 ( 前回紹介とは別サイト ) http://www.okakogi.go.jp/people/miwa/program/c_lang/c_furoku.html
Microsoft PowerPoint - algo ppt [互換モード]
( 復習 ) アルゴリズムとは アルゴリズム概論 - 探索 () - アルゴリズム 問題を解くための曖昧さのない手順 与えられた問題を解くための機械的操作からなる有限の手続き 機械的操作 : 単純な演算, 代入, 比較など 安本慶一 yasumoto[at]is.naist.jp プログラムとの違い プログラムはアルゴリズムをプログラミング言語で表現したもの アルゴリズムは自然言語でも, プログラミング言語でも表現できる
Microsoft PowerPoint - mp11-02.pptx
数理計画法第 2 回 塩浦昭義情報科学研究科准教授 [email protected] http://www.dais.is.tohoku.ac.jp/~shioura/teaching 前回の復習 数理計画とは? 数理計画 ( 復習 ) 数理計画問題とは? 狭義には : 数理 ( 数学 ) を使って計画を立てるための問題 広義には : 与えられた評価尺度に関して最も良い解を求める問題
1/8 ページ Java 基礎文法最速マスター Java Javaの文法一覧です 他の言語をある程度知っている人はこれを読めばJavaの基礎をマスターしてJavaを書くことができるようになっています 簡易リファレンスとしても利用できると思いますので これは足りないと思うものがあれば教えてください 1. 基礎 class の作成プログラムはclassに記述します たとえばSampleという名前のclassを作る場合
PowerPoint プレゼンテーション
講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる
Microsoft PowerPoint ppt
基礎演習 3 C 言語の基礎 (5) 第 05 回 (20 年 07 月 07 日 ) メモリとポインタの概念 ビットとバイト 計算機内部では データは2 進数で保存している 計算機は メモリにデータを蓄えている bit 1bit 0 もしくは 1 のどちらかを保存 byte 1byte 1bitが8つ集まっている byte が メモリの基本単位として使用される メモリとアドレス メモリは 1byte
02: 変数と標準入出力
C プログラミング入門 基幹 7 ( 水 5) 13: 構造体 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-07-06 1 例題 : 多角形の面積 n = 5 (5 角形 ) の例 n 1 n 1 1 p 1 T 0 S = i=0 p 0 T i = i=0 2
メソッドのまとめ
メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか
オートマトン 形式言語及び演習 3. 正規表現 酒井正彦 正規表現とは 正規表現 ( 正則表現, Regular Expression) オートマトン : 言語を定義する機械正規表現 : 言語
オートマトン 形式言語及び演習 3. 酒井正彦 www.trs.css.i.nagoya-u.ac.jp/~sakai/lecture/automata/ とは ( 正則表現, Regular Expression) オートマトン : 言語を定義する機械 : 言語を記号列で定義 - 記述しやすい ( ユーザフレンドリ ) 例 :01 + 10 - UNIX の grep コマンド - UNIX の
オートマトンと言語
オートマトンと言語 回目 4 月 8 日 ( 水 ) 章 ( 数式の記法, スタック,BNF 記法 ) 授業資料 http://ir.cs.yamanashi.ac.jp/~ysuzuki/public/automaton/ 授業の予定 ( 中間試験まで ) 回数月日 内容 4 月 日オートマトンとは, オリエンテーション 4 月 8 日 章 ( 数式の記法, スタック,BNF) 3 4 月 5 日
人工知能入門
藤田悟 黄潤和 探索とは 探索問題 探索解の性質 探索空間の構造 探索木 探索グラフ 探索順序 深さ優先探索 幅優先探索 探索プログラムの作成 バックトラック 深さ優先探索 幅優先探索 n 個の ueen を n n のマスの中に 縦横斜めに重ならないように配置する 簡単化のために 4-ueen を考える 正解 全状態の探索プログラム 全ての最終状態を生成した後に 最終状態が解であるかどうかを判定する
