690 likes | 799 Views
情報の表現. 【 キーワード 】 変数,変数定義,構造体, 構造体のコンストラクタ, 構造体のセレクタ,構造体定義, 単純型,複合型. 1. 変数. 変数名 = 値に付いた名前. X. 変数名. apple. 文字列オブジェクト. N. 変数名. 5. 数値オブジェクト. 変数定義の一般形. (define ( <変数名> <式> ). 変数定義の例. ( define X ( * 3.14 10 10 )). π=3.14 で近似. 3. 3. 式と評価結果. 式. 評価結果. 式. 評価結果. 式. 評価結果. 式と評価結果.
E N D
情報の表現 【キーワード】変数,変数定義,構造体,構造体のコンストラクタ,構造体のセレクタ,構造体定義,単純型,複合型 1
変数 変数名 = 値に付いた名前 X 変数名 apple 文字列オブジェクト N 変数名 5 数値オブジェクト
変数定義の一般形 (define (<変数名> <式>) 変数定義の例 (define X (*3.14 10 10)) π=3.14で近似 3 3
式と評価結果 式 評価結果 式 評価結果 式 評価結果
式と評価結果 式 評価結果 関数も「値」なので, 変数に結びつける ことができる 評価結果 変数に結びつけられるのは,「一般の式」ではなく 値であることに注意!
Racket での関数名や変数名や構造体名のルール Scheme では関数名や変数名に数字や英記号を含めることができる.
構造体とは? フィールドxの値が3, フィールドyの値が4 複数のデータ をひとつに まとめたもの 各フィールドには,名前(フィールド名)が付いている. 8
posn 構造体のコンストラクタ フィールドxの値が3, フィールドyの値が4 posn構造体では, 1番目のフィールド名が x 2番目のフィールド名が y に決まっている (make-posn3 4) 全体で1つのデータ 9
posn 構造体のコンストラクタ 構造体名 (構造体に付けられた名前) 3, 4という2つのデータから posn構造体データを組み立てる (make-posn3 4) 10
posn 構造体のセレクタ posn構造体データに対して,フィールド xを参照するセレクタ:posn-x フィールドxの値が3, フィールドyの値が4 (posn-x (make-posn3 4)) -> 3 11
posn 構造体のセレクタ フィールド名 (個々のフィールド に付けられた名前) posn 構造体データから, フィールド xの値を取り出す (posn-x(make-posn3 4)) -> 3 12 12
posn 構造体のセレクタ posn構造体データに対して,フィールド y を参照するセレクタ:posn-y フィールドxの値が3, フィールドyの値が4 (posn-y (make-posn3 4)) -> 4 13
posn 構造体のセレクタ フィールド名 (個々のフィールド に付けられた名前) 構造体データから, フィールド yの値を取り出す (posn-y(make-posn3 4)) -> 4 14 14
変数 aの定義 変数 aが構造体 「(make-posn1 2)」 を保持 17
posn構造体 点 (3,4) を作る 点 (3,4) の x 座標値を選ぶ 点 (3,4) の y 座標値を選ぶ y 点a (3,4) 4 点 (3,4) を作り a という名前にする 点a の x 座標値を選ぶ 点a の y 座標値を選ぶ x 0 3
posn構造体 posn 構造体 x y (make-posn10 20) フィールド名 • posn 構造体は Racket に組み込み済み • posn構造体は,2つのフィールド x, y を持つ複合データ • コンストラクタ ・・・ 構造体データを組み立てる make-posn • セレクタ ・・・ 構造体データから,個々のフィールド値をとりだす (「構造体名-フィールド名」の形) posn-x, posn-y 21
構造体のコンストラクタ(一般形) () この部分がコンストラクタ make-構造体名 <フィールド値> の並び 1個以上 半角のスペース で区切る 【posn構造体のコンストラクタの使用例】 半角のハイフン (make-posn3 4) 半角の括弧 で囲む このルールを守らないと構文エラー 22 22
() 構造体のセレクタ(一般形) この部分がセレクタ 構造体名-フィールド名 構造体 ※ 構造体を保持している変数や,構造体を評価結果とする式も書ける、ので要注意 セレクタを含む Scheme 式の例 半角のハイフン (posn-x(make-posn3 4)) 半角の括弧 で囲む このルールを守らないと構文エラー 23 23
新しい構造体の作成 構造体定義 構造体名,フィールド名を定め, Scheme処理系に読み込ませる 構造体定義により,新しい構造体が使えるようになる 25
構造体定義(一般形) (( )) define-struct <構造体名> <フィールド名> の並び 1個以上 半角のスペース や改行で区切る 【構造体定義の例】 (define-struct person (name age rank graduated)) ここでは,name, age, rank, graduatedという 4 つのフィールドを持つperson構造体を定義している 26 26
構造体 person の定義(例) 【構造体定義の例】 (define-struct person (name age rank graduated)) 新しい構造体ができた. →新しいコンストラクタとセレクタが使えるようになる コンストラクタ make-person セレクタ person-name, person-age person-rank, person-graduated 27 27
構造体 person のコンストラクタ (make-person"Ken A." 20 'Student false) 全体で1つの複合データ 28
構造体 person のセレクタ person-name: person構造体の nameフィールドを参照するセレクタ (person-name (make-person"Ken A." 20 'Student false)) -> "Ken A." 29
① ② ③ リストの始まり リストの終わり 30 30
構造体のリスト ① ② ③ 3人分のデータ → 3個の構造体 データに順序がある = リスト 31
この例では,4種類のデータが組み合わさっているこの例では,4種類のデータが組み合わさっている ① ② ③ 数 文字列 (文字,数字,記号, 空白文字の列) 論理値 (ブール値) (true または false) 記号(シンボル) (Symbol) (文字,数字, 記号の列) 32 32
構造体の定義 構造体名 (define-struct (フィールド名の並び)) 構造体定義の例 33
変数定義の例 変数定義.変数xが 構造体のリストを保持 34 34
同じ 変数 Xが保持しているデータが表示されている 35 35
Scheme処理系の実演 36
Racket の使用準備 Racket の起動 実演では「Advanced Student」に設定 言語 → 言語の選択 → Advanced Student → 「実行」ボタン 37 37
実演1.posn 構造体を使ってみる 1. 次の式を「対話ウインドウ」で評価させる (definea (make-posn1 2)) (defineb (make-posn3 4)) a b (posn-xa) (posn-ya) (posn-xb) (posn-yb) posn 構造体 x y (make-posn10 20) ※ posn 構造体は Racket に組み込み済み 38
実演2.実行時エラーの例 • 次を「対話ウインドウ」で評価させようとすると, • 実行時エラーが発生することを確認する (definec (make-posn1 2 3)) posn 構造体 x y (make-posn10 20) ※ posn 構造体は Racket に組み込み済み 40
【Racket の実行画面】 コンストラクタ make-posnの引数の個数は 2個である必要がある. 引数の個数が不一致の場合,実行時エラー が発生する 41
実演3.teachpack の draw.ss を使う Racket は,グラフィックスの teachpack である draw.ss が同梱 1. draw-solid-line: 始点と終点のposn構造体と色を受け取り線を描く。 2. draw-solid-rect: 左上角のposn構造体、幅、高さ、色を受け取り長方形を描く。 3. draw-solid-disk: 中心の posn 構造体、半径と色を受け取り円盤を描く。 4. draw-circle: 中心の posn 構造体、半径と色を受け取り円を描く。 描画に成功したとき, それぞれの関数は,評価結果として true を返す。 各描画演算には対応する clear-演算がある: clear-solid-line、clear-solid-rect、 clear-solid-disk、clear-circle 詳しくは Racket の Help Desk にある draw.ss の説明を参照
teachpack の draw.ss を使う teachpack を読み込む (draw.ss の例) Language → Add Teachpack… を選択 → teachpack の htdp フォルダに ある draw.ss を選択 → Run ボタンを押してteachpackを有効にする Teachpack の draw.ss が読 み込まれたことを示す (注:下線部は システムごとに異なる)
キャンバスでは,左上角の座標が(0,0) y座標の値は下にいくほど大きくなる 描画演算のためのキャンバス 左上角 が(0,0) x 座標 y 座標 (draw-solid-line (make-posn 1 1) (make-posn 50 50)'red) で描画された直線
手順 構造体 posn のコンストラクタ を使用 (start 300300)キャンバスを開く (draw-solid-line (make-posn 1 1) (make-posn 50 50)'red) 赤い線の描画 (draw-solid-rect (make-posn 200 10) 50 200 'blue) 青い長方形の描画(幅50で高さ200) (draw-circle (make-posn 200 10) 50 'red) 赤い円の描画(半径50) (draw-solid-disk (make-posn 200 10) 50 'green) 緑の円盤の描画(半径50で中心が長方形の頂点) (draw-solid-string (make-posn 50 50) "Here") 文字列(“Here”)の描画 (stop)キャンバスを閉じる