Microsoft PowerPoint - Ruby n

Similar documents
Microsoft PowerPoint - ruby_instruction.ppt

Ruby演習テキスト1

Microsoft PowerPoint - 11RubyIntro-No02.ppt [互換モード]

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

プログラミング基礎I(再)

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

Java講座

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Prog1_6th

Microsoft PowerPoint - chap10_OOP.ppt

JEB Plugin 開発チュートリアル 第4回

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

JavaプログラミングⅠ

ポインタ変数

Javaプログラムの実行手順

プログラミング入門1

sinfI2005_VBA.doc

デジタル表現論・第6回

Microsoft PowerPoint - 09.pptx

デジタル表現論・第4回

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

レコードとオブジェクト

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

メソッドのまとめ

Prog2_12th

PowerPoint プレゼンテーション

JavaプログラミングⅠ

プログラミング入門1

JAVA入門

MS-ExcelVBA 基礎 (Visual Basic for Application)

プログラミング入門1

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

2.2.8 変数 ( ローカル変数 ) の宣言と代入 文字列 シングルクオートとダブルクオート 文字列の比較 数値 演算子による値の比較 演算子の優先順位

PowerPoint Presentation

情報処理Ⅰ

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

プログラミング実習I

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Javaプログラマー早期育成ドリル ~コードリーディング編~ 解答

JavaScriptプログラミング入門 2.JavaScriptの概要

Microsoft PowerPoint - CproNt02.ppt [互換モード]

PowerPoint プレゼンテーション

ExcelVBA

JavaプログラミングⅠ

第2回講義:まとめ

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,

テキスト処理第 2 回 田中哲産業技術総合研究所情報技術研究部門 akira/textprocess/

基礎計算機演習 実習課題No6

PowerPoint プレゼンテーション

JavaScript演習

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

模擬試験問題(第1章~第3章)

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

GEC-Java

レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb

ポインタ変数

Formal Engineering Methods for Software Development --An Introduction to SOFL--

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

Microsoft PowerPoint - 計算機言語 第7回.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog03.ppt

プレポスト【解説】

Microsoft PowerPoint - ca ppt [互換モード]

Scilab 勉強会 ( 第 3 回 ) 高橋一馬, 十文字俊裕, 柏倉守 平成 17 年 11 月 15 日 関数 ファイルはエディタを用いて作成する.Scilab にはエディタ SciPad が附属している.SciPad では なく他のエディタを利用してもよい. 作成した関数は Scilab に

1

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

Microsoft Word _VBAProg1.docx

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

JavaScript 演習 2 1

Prog1_10th

Microsoft PowerPoint ppt

Microsoft PowerPoint - Prog05.ppt

ex04_2012.ppt

piyo0704a.rtfd

Prog1_15th

r1.dvi

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

オートマトンと言語

4-4- 基スクリプト言語に関する知識 コードの作成や修正が容易とされるスクリプト言語を学習し アプリケーション開発の手法を習得する 本カリキュラムでは まずスクリプト言語に位置づけされる Perl PHP Python JavaScript Ruby といった Ⅰ. 概要プログラミング言語の特徴に

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

レコードとオブジェクト

人工知能入門

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Microsoft PowerPoint - lec10.ppt

第 1 章 Java 言語について ( オブジェクト指向, 変数の扱い方, 繰り返し条件と条件分岐 ) Java 言語の概要とオブジェクト指向, 変数の扱い方, 繰り返し条件と条件分岐について理解し, プログラム作成を行う 1.1 Java 言語の概要 JAVA は Sun Microsystems

講習No.10

微分方程式 モデリングとシミュレーション


Microsoft PowerPoint - diip ppt

Program Design (プログラム設計)

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

Java言語 第1回

プログラミング実習I

第7回 Javascript入門

情報処理Ⅰ演習

Transcription:

一般財団法人 Ruby アソシエーションホームページからの抜粋 技術者向け情報 -> 開発 -> Ruby -> チュートリアル http://www.ruby.or.jp/ja/tech/development/ruby/tutorial/ Tom. Stuart 著, 笹田耕一監訳, 笹井崇司訳 : アンダースタンディングコンピュテーション, オライリー ジャパン ( 第 1 章 ) Ruby は式指向 (expression-oriented) 全ての有効コードは実行されて 1 つの値を生成 IRB( Interactive Ruby): 対話型コンソール Ruby コマンドの標準入力で結果を標準出力に表示 値基本データ ブール値数値 ( 整数 小数 浮動小数点 複素数 有理数 ) 文字列シンボル名前を表現する不変値 データ構造配列 [ ] ハッシュ { キー => 要素 } 範囲 Proc nil 評価されていない Ruby コードの集まり 有効な値が存在しないことを示す値 >> (true && false ) true => true 数値 >> (3+3)*(14/2) => 42 >> 'hello' + ' world' => "hello world" >> 'hello world'.slice(6) => "w" >> :my_symbol => :my_symbol >> :my_symbol == :my_symbol => true 文字列 ブール値 シンボル : 名前を表現する不変値ハッシュのキー ハッシュのキー >> fruit = { 'a' => 'apple', 'b' => 'banana', 'c' => 'coconut'} {"a"=>"apple", "b"=>"banana", "c"=>"coconut"} >> fruit['d']='date' => "date" >> fruit {"a"=>"apple", "b"=>"banana", c"=>"coconut", "d"=>"date"} >> dimension={width: 1000, height: 2250} => {:width=>1000, :height=>2250} >> fact = proc { n n==1? 1: n*fact.call(n-1)} => #<Proc:0x2d64d40@(irb):4> >> fact.call(4) 24 fact = lambda { n n==1? 1: n*fact.call(n-1)} fact = -> (n){n==1? 1: n*fact.call(n-1)} proc lambda -> のメソッドで違いは? fact = Proc.new{ n n==1? 1: n*fact.call(n-1)} 条件式? 真の時の値 : 偽の時の値

制御構造 条件分岐 if 条件式 1 then # 条件式 1 が真の場合の処理 elsif 条件式 2 then # 条件式 2 が真の場合の処理 else # 条件式 1 2 がともに偽の場合の処理 case 文 while 文その他の表現 数値.times { 変数 # 処理 } break( 繰り返しを中断し抜ける ) next redo オブジェクトとメソッド全ての値はオブジェクト (object) 相互にメッセージを送る それぞれ 特定のメソッド (method) の集まりをもち 特定のメッセージに反応 クラスの定義 クラスはオブジェクトの振る舞いを定義するひな型表現 クラス名.newでオブジェクト( インスタンス ) を生成 クラスの定義で 変数やメソッド initialize 等のメソッドを共有 継承別クラスのメソッド定義を取り込む classで定義されるメソッドは基本的にはインスタンスメソッド クラス名は大文字で開始 def メソッド名 の形式で記述 class Caliculatror def divide(x,y) x/y クラスの継承 Ruby でもクラスを継承して新たにクラスを定義 class クラス名 < スーパークラス名 # クラスの定義 特異メソッドクラスではなくオブジェクトにメソッドを定義 モジュールメソッド定義の共有の方法モジュール : 名前空間提供 Mix-in でクラスの拡張クラス定義の文 include でインスタンスメソッド >> module Addition >> def add(x,y) >> x+y >> >> => nil >> class AddingCalculator >> include Addition >> => AddingCalculator >> ac = AddingCalculator.new => #<AddingCalculator:0x2e3eb88> >> ac.add(5,8) => 13 メソッドの定義 def hello(name = "Ruby") message = "Hello, " + name + ". n" puts message if ARGV.size!= 1 hello() else hello(argv[0]) def sum1(*nums) # 可変長 result = 0 nums.each { num result += num } result # デフォルト値でメソッドを呼び出す 引数は で囲まれた変数に代入

変数名 : スコープ ( 有効範囲 ) 特徴 : 変数の命名規則 ローカル変数 : 宣言した位置からブロック メソッド クラス モジュールの終りまでの範囲グローバル変数 : プログラム全体 : どこからでも : 参照可能 : 先頭文字が $ インスタンス変数 : クラスのメソッド定義内 : インスタンス化された各オブジェクトに固有先頭文字が @ クラス変数 : スコープはクラスの定義内全体 : クラスに固有の変数インスタンス化された全オブジェクト アクセス可でオブジェクト間で値を共有 : 先頭文字が @@ インスタンス変数 class で定義されるインスタンスメソッド def メソッド名 の形式で記述 class HelloWorld def name return @name def name=(value) @name = value bob=hello.new( Bob ) # クラスメソッド p bob.name インスタンス変数のアクセスメソッド クラス中のインスタンス変数クラスの外から直接参照 変更は不可変数の参照や変更は アクセスメソッド経由 Rubyではインスタンス変数へのアクセスを簡単化アクセスメソッドの自動生成法を用意 attr_reader attr_writer attr_accessor 例題 <accessor.rb> class Greeting attr_accessor :name # アクセスメソッドを定義 g = Greeting.new g.name = "Taro" # オブジェクト名. 変数名 = puts g.name # オブジェクト名. 変数名 で参照 アクセッサについてインスタンス変数 : インスタンスで属性の値を保存する クラス定義で インスタンスを作成した場合 そのインスタンスでの属性値をメソッドを超えてオブジェクトの状態を保持することができる @ 変数名 の形式を用いる 多くのクラス定義において必要だが 逐一記述することは手間を必要とするため attr_accessor attr_reader attr_writer で一括定義 インスタンス固有の初期化処理を initialize で定義

理解できてない クロージャー関数オブジェクトで 引数以外の関数定義時の コンテキストに含まれる変数情報をもつ def companions yield "Lief" yield "Jasmine" yield "Barda" companions { x puts x } ブロックは, 仮引数で yield から暗黙のうちに参照 関数的に呼出され yield に与えた式の値が実引数として x に渡され, ブロックの puts x で値を印字 class Fixnum def toroman data = [ ["M", 1000], ["CM", 900], ["D", 500], ["CD", 400], ["C", 100], ["XC", 90], ["L", 50], ["XL", 40], ["X", 10], ["IX", 9], ["V", 5], ["IV", 4], ["I", 1] ] return '' if self == 0 data.each do letter, value return ( letter * (self / value)) << (self % value).toroman if value <= self return (self % value).toroman 例 1 ローマ数字とアラビア数字の変換 (from 山﨑さんのサジェスチョン課題 ) def toarabic(rom) data = [ ["M", 1000], ["CM", 900], ["D", 500], ["CD", 400], ["C", 100], ["XC", 90], ["L", 50], ["XL", 40], ["X", 10], ["IX", 9], ["V", 5], ["IV", 4], ["I", 1] ] answer = 0 for value0, value1 in data while rom.index(value0) == 0 answer += value1 rom.slice!(value0) answer #toarabic 例 1: つづきローマ数字とアラビア数字の変換 例題 2 1 属性閉包 2 極小被覆を求めるアルゴリズム注 : 属性集合と関数従属集合を与えたとき第 3 正規形と BCNF を求めるアルゴリズム属性閉包を求めるアルゴリズム Step1 FD の右辺を 1 個の属性に分解 Step2 X を ( 操作の結果としての閉包 ) 更新する 初期値として X={A 1, A 2,, A n } Step3 FD を探索 {B i }=B 1 B 2 B m C を探索 X に付加する 但し C X {B i } X とする Step4 属性の追加がなくなる X が {A 1, A 2,, A n } +

属性閉包を求めるアルゴリズム Step1 FD の右辺を 1 個の属性に分解 Step2 X を ( 操作の結果としての閉包 ) 更新する 初期値として X={A 1, A 2,, A n } Step3 FD を探索 {B i }=B 1 B 2 B m C を探索 X に付加する 但し C X {B i } X とする Step4 属性の追加がなくなる X が {A 1, A 2,, A n } + 関数従属性の射影による変化 リレーション R と関数従属の集合 S 射影 R 1 を R 1 =π L (R) で成立する関数従属集合 T を求める ( ステップ 1) T = { 空集合 } を初期値とする ( ステップ 2) R 1 の属性 X からなる全ての部分集合 S に関して X + を計算自明でない関数従属 X A を T に加える 注 :R 1 の要素ではない属性も X + に含まれる可能性あり ( ステップ 3) F T が F 以外の T から導出されるとき F を除外注 :T は関数従属性の被覆 極小被覆とは限らない アームストロングの公理系リレーションスキーマ R S (X,Y,Z) (X,Y,Z は属性の部分集合 ) 反射律 Y X なら X Y t 1,t 2 を R S の任意のタップルとする このとき X の全ての属性 X i について t 1 [X i ]=t 2 [X i ] とするとき t 1 [X]=t 2 [X] で X X である 添加律 {X Y} なら XZ YZ t 1 [XZ]=t 2 [XZ] とすると 反射律から t 1 [X]=t 2 [X] で 条件式より t 1 [Y]=t 2 [Y] で かつ 前提から t 1 [Z]=t 2 [Z] で t 1 [YZ]=t 2 [YZ] 推移律 {X Y,Y Z} なら X Z t 1 [X]=t 2 [X] のとき 条件式より t 1 [Y]=t 2 [Y] t 1 [Y]=t 2 [Y] のとき 条件式より t 1 [Z]=t 2 [Z] よって t 1 [X]=t 2 [X] のとき t 1 [Z]=t 2 [Z] プログラムの 意味 とは操作的意味論 表示的意味論の Ruby 記述 チューリングマシン Ruby から機能を取り除き 変数の参照一引数関数の作成一引数関数の呼び出しの 型なしラムダ計算 で FizzBuzz を実装 型なしラムダ計算で万能チューリングマシンをシミュレート 19