京都大学情報学研究科 通信情報システム専攻 湯淺研究室 M2 平石 拓

Slides:



Advertisements
Similar presentations
情報基礎実習 I (第6回) 木曜4・5限 担当:北川 晃. Stream クラスを用いたファイルの接続 … Dim インスタンス名 As New IO.StreamReader( _ “ ファイルの絶対パス ”, _ System.Text.Encoding.Default) … s = インスタンス名.
Advertisements

1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
Faculty of Computer and Information Sciences, Hosei University Resource Administration Team CIS RAT 1 Linux リテラシ 2006 第 3 回 エディタ、シェル.
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
(Rubyistのための) 超音速:ML入門
プログラミング言語論 第8回 LISP 担当:犬塚.
プログラミング言語論 関数型プログラミング言語 水野嘉明
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
Fortran と有限差分法の 入門の入門の…
プログラミング言語としてのR 情報知能学科 白井 英俊.
IO - 入出力 小西 亨.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
ISD実習E 2009年7月13日 LISPシステム入門 (第6回) 関数の定義 eval load 関数.
Debianにおける Common Lispプログラミング環境
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
数値計算及び実習 第3回 プログラミングの基礎(1).
Lightweight Language Weekend ls-lRシェル
ISD実習E 2009年6月1日 read関数 read-macro back-quote 文字列のread 課題
第13回 プログラミングⅡ 第13回
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
数値計算及び実習 第7回 プログラミングの基礎(5).
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
条件式 (Conditional Expressions)
学術情報メディアセンター メディアコンピューティング分野 助教 平石 拓
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
Tokuda Lab. NISHIMURA Taichi
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
スクリプト言語を用いたPHITSの連続実行
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
プログラミング 2 ファイル処理.
PROGRAMMING IN HASKELL
PROGRAMMING IN HASKELL
FlexとBison+アルファ -実習編-
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
京都大学情報学研究科 通信情報システム専攻 湯淺研究室 D1 平石 拓 2005/10/18
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
プログラミング演習I 2003年6月25日(第10回) 木村巌.
お仕事にまったく役にたたない内容のコードレビューやりたいと思います。
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
計算機構成 第2回 ALUと組み合わせ回路の記述
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
4.リスト,シンボル,文字列.
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
11.再帰と繰り返しの回数.
コンパイラ 2011年10月20日
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
C言語 はじめに 2016年 吉田研究室.
情報とコンピュータ 静岡大学工学部 安藤和敏
15.cons と種々のデータ構造.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
PROGRAMMING IN HASKELL
執筆者:難波和明 授業者:寺尾 敦 atsushi [at] si.aoyama.ac.jp
5. 任意長の合成データ:リスト プログラミング論I.
PROGRAMMING IN HASKELL
高度プログラミング演習 (11).
コンパイラ 2012年10月11日
アルゴリズムとデータ構造 補足資料6-1 「サンプルプログラムcat1.c」
PROGRAMMING IN HASKELL
情報処理Ⅱ 2005年11月25日(金).
printf・scanf・変数・四則演算
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
Presentation transcript:

京都大学情報学研究科 通信情報システム専攻 湯淺研究室 M2 平石 拓 TUTScheme の利用 京都大学情報学研究科 通信情報システム専攻 湯淺研究室 M2 平石 拓

TUTScheme Scheme TUTScheme Lispの方言の一つ (cf. Common Lisp, Emacs Lisp) リスト処理 対話環境・・・デバッグがしやすい TUTScheme Schemeの実装の1つ(湯淺先生開発)。 現在、京大メディアセンターの端末(Red Hat Linux) で利用可能。

起動・終了 $ tus 起動 TUTScheme version 1.4g (C) Copyright Taiichi Yuasa … 7 SC> (bye) Bye. $ 起動 終了

対話環境の利用 SC> (+ 3 4) 7 (+ 3 4)の評価値 SC> (* (+ 1 2) (- 10 7)) 9 1234 SC> "abc" "abc" (+ 3 4)の評価値 (* (+ 1 2) (- 10 7))の評価値 1234の評価値 "abc"の評価値

変数定義(1) SC> (define x 10) xという名前の変数を定義 x SC> x 10 SC> (* x (+ x 3)) 130 SC> (set! x 24) 24 xという名前の変数を定義 x × (x+3) xの値を変更

変数定義(2):関数 SC> (define (square x) (* x x)) square SC> (square 10) 100 SC> (square (* 3 4)) 144 SC>

変数定義(3):関数 n! を求める関数 n=0の時 n=0でない時 SC> (define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) fact SC> (fact 10) 362800

記号(1) (quote 〈記号〉) ・・・スペシャル・フォーム SC> (quote x) x SC> (quote cat) SC> (define x (quote y)) SC> x y

記号(2) ’〈記号〉 でも同じ意味 SC> ’x x SC> ’cat cat SC> (define x ’y)

リスト(1) Lispにおける最も重要なデータ型の1つ データ(要素)の“並び”を表す (1 2 3 4 5 6 7 8 9 10) (we eat rice) ((a b c) x y (1 2)) など。

リスト(2) SC> (list 1 2 3 4) (1 2 3 4) SC> (list ’w ’x (list ’y ’z)) (w x (y z)) SC> (define x 4) x SC> (list x (* x 5)) (4 20) SC> (list) () 空リスト

リスト(3) リストの要素がわかっている場合は、 (quote 〈記号〉) でもよい。 SC> ’(x y) SC> ’((x y) 1 2 (a b c)) ((x y) 1 2 (a b c)) SC> ’(define (square x) (* x x)) (define (square x) (* x x)) (quote (x y)) と同じ

リストを扱う関数(car, cdr) SC> (car ’(a b c d)) a SC> (cdr ’(a b c d)) SC> (car (cdr (cdr ’(a b c d)))) c SC> (cdr (cdr (cdr (cdr ’(a b c d))))) () リストの先頭要素 先頭要素を除いたリスト 空リスト

リストを扱う関数(cons) リストの先頭に要素を追加 SC> (cons ’we ’(eat rice)) SC> (cons ’never (cdr ’(we eat rice))) (never eat rice) SC> (cons ’(a b c) ’(x y z)) ((a b c) x y z) SC> (cons ’single ’() ) (single)

リスト処理関数の定義例 SC> (define (my-length x) (if (null? x) (+ 1 (my-length (cdr x))))) my-length SC> (my-length ’(a b c d)) 4

式の評価 (+ (* 3 2) 5) や (define x 30) なども、それ自身は 単なるリスト。 SC> (list ’+ (list ’* 3 2) 5) (+ (* 3 2) 5) システムがこのリストを「評価」すると、 “関数呼び出し式”として処理を行い、値を返す。 システムが評価できるデータを 「フォーム」という。 フォームでないデータを評価しようとすると、エラー になる。

フォームの分類(1) リスト・フォーム 関数適用 ・・・ ( 〈関数式〉 〈式1〉 … 〈式n〉 ) スペシャル・フォーム マクロ・フォーム define, set!, quote, if など特定の記号で始まるリスト それぞれのスペシャルフォームごとに決まった評価方法 マクロ・フォーム マクロを表す記号で始まるリスト(詳細は省略)

フォームの分類(2) 記号 変数の値が評価値になる SC> (define x 30) x SC> x 30 SC> + #<function +>

フォームの分類(3) その他のデータ 数値や文字列などは、それ自身が評価値となる SC> 123 123 SC> ”abcde”

consセル(1) 例1: (we eat rice) の内部表現 we eat rice () :consセル car部 cdr部

consセル(2) we eat rice () they 例2: (define x ’(we eat rice)) (define y (cons ’they (cdr x)) x: we eat rice () y: they

consセル(3) (cons 〈データ1〉 〈データ2〉): SC> (cons ’rice ’()) (rice) car部とcdr部がそれぞれ〈データ1〉,〈データ2〉 であるコンス・データを返す。 SC> (cons ’rice ’()) (rice) SC> (cons ’eat (cons ’rice ’())) (eat rice) SC> (cons ’we (cons ’eat (cons ’rice ’()))) (we eat rice)

consセル(4) x y x y z ドット・ペア SC> (cons ’x ’y) (x . y) ドット・リスト SC> (cons ’x (cons ’y ’z)) (x y . z) x y x y z

consセル(5) we 123 eat rice () they 破壊的操作 SC> (set-cdr! x 123) SC> (set-car! x y) ((they eat rice) . 123) x: we 123 eat rice () y: they

入出力関数(1) 出力関数 SC> (write ’(a b c)) (a b c)(a b c) システムの出力(評価値) write関数の出力 SC> (begin (write ’(a b c)) (newline)) (a b c) #t SC> write関数の出力 システムの出力(評価値)

入出力関数(2) SC> (define (square x) (write (list ’x x)) (newline) SC> (square (* 3 4)) (x 12) 144 SC>

入出力関数(3) 入力関数 SC> (read) abcde SC> (fact (read)) 11 39916800 (キーボードから入力) システムの出力(評価値) (キーボードから入力)

ファイル入出力(1) SC> (define out (open-output-file ”outfile”)) out SC> out #<port to outfile> SC> (write (fact 7) out) 5040 SC> (newline out) #t SC> (close-output-port out) (fact 7)の結果を“outfile”に書き込む

ファイル入出力(2) SC> (define in (open-input-file ”infile”)) in SC> (read in) data #<end-of-file> SC> (close-input-port in) #t ”infile”からデータを1つ読み込む ファイルの終端に達した場合

ファイル入出力(3) (call-with-output-file 〈ファイル名〉 〈関数〉): 指定されたファイルへの出力ポートを 引数として 〈関数〉を呼び出し,その返り値を返す. (call-with-input-file 〈ファイル名〉 〈関数〉): 指定されたファイルへの入力ポートを 引数として 〈関数〉は1引数でなければならない。 実行終了後、ファイルは自動的に閉じられる。

ファイル入出力(4) 例:12, 22, ..., 992 の値をファイルに書き出す。 (call-with-output-file ”square99” (lambda (out) (do ((n 1 (+ 1 n))) ((>= n 100)) (write (* n n) out) (newline out))))

ファイル入出力(5) 例:ファイルから全てのデータを順に読み込んで 画面に出力する。 (call-with-input-file ”infile” (lambda (in) (do ((dat (read in) (read in))) ((eof-object? dat)) (write dat) (newline))))

プログラム・ファイル (load 〈ファイル名〉):ファイルに書かれているフ ォームを順に、全て評価する。 SC> (load ”square.scm”) Loading square.scm... Finished. “square.scm” SC> (square 4) 16

関数実行のトレース (trace 〈関数名〉):関数のトレースを開始 (untrace 〈関数名〉):トレースをやめる

関数実行のトレース(使用例) SC> (trace fact) #t SC> (fact 2) 1>(fact 2)

代表的な組み込み関数(数値) 加減乗除 比較 (+ 〈数値1〉 … 〈数値n〉) (- 〈数値1〉 … 〈数値n〉) (remainder 〈整数1〉 〈整数2〉) :割り算の余り 比較 (= 〈数値1〉 … 〈数値n〉) (< 〈数値1〉 … 〈数値n〉) (> 〈数値1〉 … 〈数値n〉) (<= 〈数値1〉 … 〈数値n〉) (>= 〈数値1〉 … 〈数値n〉)

代表的な組み込み関数(リスト) (nth 〈インデックス〉 〈リスト〉) (nthcdr 〈インデックス〉 〈リスト〉) (last 〈リスト〉) (length 〈リスト〉) (append 〈リスト1〉 … 〈リストn〉) (reverse 〈リスト〉)

代表的な組み込み関数 (等号・論理演算) 等号 論理演算 (eq? 〈データ1〉 〈データ2〉) (eqv? 〈データ1〉 〈データ2〉) (equal? 〈データ1〉 〈データ2〉) 論理演算 (not 〈データ1〉) (and 〈データ1〉 … 〈データn〉)   【特殊フォーム】 (or 〈データ1〉 … 〈データn〉) 【特殊フォーム】

代表的な組み込み関数(データ型述語) (number? 〈データ〉) (integer? 〈データ〉) (symbol? 〈データ〉) (pair? 〈データ〉) (list? 〈データ〉) (null? 〈データ〉) (function? 〈データ〉) (string? 〈データ〉)

その他の組み込み関数 システムとの対話の記録 ヘルプ機能 (transcript-on 〈ファイル名〉):システムとの対話をファ イル(ログファイル)に記録する (transcript-off):ログファイルへの記録をやめる ヘルプ機能 (apropos 〈文字列〉):〈文字列〉を含む組み込み関数、 スペシャルフォーム、マクロの一覧を表示する

(参考)「TUTSchemeのマニュアル」 今回扱わなかった関数等の説明。 http://www.yuasa.kuis.kyoto-u.ac.jp/~komiya/tus-man/tus/ http://winnie.kuis.kyoto-u.ac.jp/~okuno/Lecture/04/IntroAlgoDS/