1 / 44

プログラミング入門 ー Scheme による学習 ー

プログラミング入門 ー Scheme による学習 ー. 【 キーワード 】 式,評価結果,関数適用,リスト, リストの操作(合併,フィルタ,ソート,マップ), 条件分岐,式の抽象化としての関数. プログラム コンピュータの動作 手順を記述したもの. プログラミング言語 プログラムを記述するための専用の言語. 2. 簡単な Scheme プログラム例. (display "Hello,World"). ■ プログラムの実行例. 式. 全体で1つの式. 引数. 関数名. (display "Hello,World"). 式の終わり (半角の「 ) 」).

golda
Download Presentation

プログラミング入門 ー Scheme による学習 ー

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. プログラミング入門ー Scheme による学習 ー 【キーワード】式,評価結果,関数適用,リスト,リストの操作(合併,フィルタ,ソート,マップ),条件分岐,式の抽象化としての関数

  2. プログラム コンピュータの動作 手順を記述したもの プログラミング言語 プログラムを記述するための専用の言語 2

  3. 簡単な Scheme プログラム例 (display "Hello,World") ■ プログラムの実行例

  4. 全体で1つの式 引数 関数名 (display "Hello,World") 式の終わり (半角の「)」) 式の始まり (半角の「(」) ■ プログラムの実行例 式を与えると 評価結果や 副作用が出てくる

  5. ここまでのまとめ • Scheme では,1つの式だけも,1つのプログラムになる • Scheme の式は,関数名と引数が並んでいて,全体が半角の括弧 「(」と「)」で囲まれている • Racket では,displayは画面表示を指示する関数である

  6. 式と評価結果 式 表示 式 表示 式 評価結果 display (つまり表示用の関数)を使わなくても, 式の評価結果が表示される(あとで実演) ※ これは Scheme処理系の特徴機能

  7. 関数の例 ※ 以下は Racket に組み込み済み (Racket ソフトウエアを起動するとすぐに使える) + - * /・・・ 四則演算子 quotient remainder・・・ 整数の演算 add1 sub1 max min abs sqr ・・・ 数の演算 expt log ・・・ 指数/対数 sin cos tan atan・・・ 三角関数   <,<=,>,>=,= ・・・ 大小判定など odd?, even?・・・ 偶数/奇数判定  7

  8. 数の比較 演算子 意味 < より小さい <= 以下 > より大きい >= 以上 = 等しい 注意:全角文字の「≦」,「≧」を使ってはいけない 8

  9. 偶数奇数の判定 (odd?even?) odd?の意味:奇数ならば true(さもなければ false) even?の意味:偶数ならば true(さもなければ false) 9

  10. 条件分岐(1) ある条件が成り立つときだけ,ある式の評価結果を得る <一般形> (cond [条件式 実行したい式]) <実行例> 式 評価結果

  11. 条件分岐(2) 条件の成否により,違う式の評価結果を得る <一般形> (cond [条件式 実行したい式] [else 条件が成り立たない場合に限り実行したい式) <実行例> 式 評価結果

  12. リスト • 任意個数のデータの並び • リストの例 (list1 2 3 4) (list"book" "pen")

  13. リスト 15 8 6 32 終端 データの集まり (リストを構成する要素には順序がある) (list15 8 6 32) 全体で1つの複合データ 13

  14. リストの例 上記のような形をした2次元(縦と横)の表 14

  15. ② ③ リストの始まり リストの終わり 15 15

  16. リストの操作 (1) 合併 複数のリストを,要素の順序を保ったままで 1つのリストにする リスト2つ リスト2つ リスト3つ 16

  17. リストの操作 (2) フィルタ リストの全要素に関数を適用し,結果値が true になるような要素だけを含む新しいリストを作る 17

  18. リストの操作 (3) ソート リストの要素を,ある規則で並べ替え 18

  19. リストの操作 (4) マップ リストの全要素に関数を適用し, 結果値を要素とする新しいリストを作る リスト1つ (odd? が引数を1つとる関数なので) リスト2つ (+ が引数を2つ以上とる関数なので) 19

  20. 関数 関数名f ※ 関数名は自由に 決めて良い • 抽象化としての関数 • オブジェクトとしての関数 【たくさんの式】 抽象化 (*2001.05) (*981.05) (*5001.05) (define (f x) (* x 1.05)) ※ 「x」のところは 自由に決めて良い

  21. 関数定義 共通部分とそうでない部分を 区別しながら抽象化 定義された関数 (define (area-of-disk r) (* 3.14 (*r r))) 半径1の円 (*3.14 (*11)) 半径2の円 (*3.14 (*22)) 半径3の円 (*3.14 (*33)) 21

  22. ■ Scheme 処理系 である Racket を使ってみたい 場合 Racket はインターネット で配布されている http://racket-lang.org/ ※ 但し,この資料の中身を 試すには「Advanced Stundent」に設定する必要がある

  23. 言語の選択

  24. 言語の選択→ Advanced Student

  25. よくある失敗例 (1) ■ 症状 ■ 対処法 ・「言語」をクリック ・「言語の選択」 ・「Advanced Student」を選択 ・OK をクリックし,「実行」ボタンを押す エラーメッセージ reference to an identifier before its definition: display

  26. よくある失敗例 (2) ■ 症状 ■ 対処法 ・「Help」をクリック ・「Racket を日本語で 使う」を選択 表示が英語なので,日本語に変えたい ! という場合

  27. Scheme処理系の実演

  28. Racket の使用準備 Racket の起動 実演では「Advanced Student」に設定 言語 → 言語の選択 → Advanced Student → 「実行」ボタン 28 28

  29. Racket の画面 実行ボタン 定義ウインドウ (Definition Window) 対話ウインドウ (Interaction Window) 本資料では,Scheme 処理系ソフトウエアとして Racket を使用 29

  30. Scheme 処理系 (Racket)の起動 次の 2 つの式を Scheme 処理系 (Racket) で評価させ,評価結果を得る 実演1.式と評価結果 (+ 3 2) (-10 4) 式の評価結果が得られる 30 30

  31. 式 「(+3 2)」を入力して, 入力を促す「プロンプト」 31

  32. 式 「(+3 2)」を入力して, Enter キーを押すと,式の評価結果 「5」が出力される 32

  33. 式 「(-10 4)」を入力して, 33

  34. 対話ウインドウでは,式を入力し,Enter キーを押すたびに,評価結果が出力される 式 「(-10 4)」を入力して, Enter キーを押すと,式の評価結果 「6」が出力される 34

  35. 半径から円の面積を求める関数を定義する 実演2.関数定義 r(円の半径) 半径 r の円の面積は πr2 35 35

  36. 円の面積 円の面積:円の半径 rからの関数とみなす (rの値は,さまざまな値をとり得る) 36

  37. 関数定義 共通部分とそうでない部分を 区別しながら抽象化 定義された関数 (define (area-of-disk r) (* 3.14 (*r r))) 【たくさんの式】 半径1の円 (*3.14 (*11)) 半径2の円 (*3.14 (*22)) 半径3の円 (*3.14 (*33)) 37

  38. 関数定義の例 定義ウインドウで,関数定義を行う 38 38

  39. 関数定義の読み込み 実行ボタンを押して, 関数定義を,読み込ませる このとき、対話ウインドウ の中身はクリアされる 読み込ませた関数 area-of-disk を使ってみよう 39 39

  40. 関数適用の例 対話ウインドウで、 (area-of-disk5) と入力して、Enter キーを押す ※ Racket は,関数 area-of-diskのパラメータ rを 5 に置き換えた後,本体式を評価する) 40 40

  41. 式の評価結果の例 式の評価結果である「78.5」 が表示される  (確かに 5×5×3.14 = 78.5) 41 41

  42. 式の評価結果の例 今度は,対話ウインドウで、 (area-of-disk10) と入力して、Enter キーを押す ※ Racket は,関数 area-of-diskのパラメータ rを 10 に置き換えた後,本体式を評価する) 式の評価結果である「314」が 表示される 42 42

  43. f(0) = 3, f(10) = 23 であるような線形関数(linear function) fを考える この関数 fを,Scheme の関数として定義 その後,f(0), f(10) などの値を,Racket を使って,求める 実演3.関数定義 f(x) 23 3 x 0 10 (define (f x) (+ (*2x) 3)) 43 43

  44. 44

More Related