京都大学情報学研究科 通信情報システム専攻 湯淺研究室 D1 平石 拓 2005/10/18

Slides:



Advertisements
Similar presentations
1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
Advertisements

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 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
P HI T S スクリプト言語を用いた PHITS の連続 実行 Multi-Purpose Particle and Heavy Ion Transport code System title 年 2 月改訂.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
(Rubyistのための) 超音速:ML入門
プログラミング言語論 第8回 LISP 担当:犬塚.
プログラミング言語論 関数型プログラミング言語 水野嘉明
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
Fortran と有限差分法の 入門の入門の…
東京工科大学 コンピュータサイエンス学部 亀田弘之
京都大学情報学研究科 通信情報システム専攻 湯淺研究室 M2 平石 拓
プログラミング言語としてのR 情報知能学科 白井 英俊.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
ISD実習E 2009年7月13日 LISPシステム入門 (第6回) 関数の定義 eval load 関数.
Debianにおける Common Lispプログラミング環境
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
数値計算及び実習 第3回 プログラミングの基礎(1).
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
ISD実習E 2009年6月1日 read関数 read-macro back-quote 文字列のread 課題
第13回 プログラミングⅡ 第13回
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
数値計算及び実習 第7回 プログラミングの基礎(5).
条件式 (Conditional Expressions)
学術情報メディアセンター メディアコンピューティング分野 助教 平石 拓
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
Tokuda Lab. NISHIMURA Taichi
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
スクリプト言語を用いたPHITSの連続実行
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
第7回 条件による繰り返し.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
プログラミング言語入門 手続き型言語としてのJava
プログラミング 2 ファイル処理.
第1回.リレーショナルデータベースを使ってみよう
FlexとBison+アルファ -実習編-
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
プログラミング演習I 2003年6月25日(第10回) 木村巌.
第7回 条件による繰り返し.
お仕事にまったく役にたたない内容のコードレビューやりたいと思います。
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
4.リスト,シンボル,文字列.
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
11.再帰と繰り返しの回数.
コンパイラ 2011年10月20日
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
C言語 はじめに 2016年 吉田研究室.
情報とコンピュータ 静岡大学工学部 安藤和敏
15.cons と種々のデータ構造.
統計ソフトウエアRの基礎.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
PROGRAMMING IN HASKELL
執筆者:難波和明 授業者:寺尾 敦 atsushi [at] si.aoyama.ac.jp
情報処理Ⅱ 第7回 2004年11月16日(火).
PROGRAMMING IN HASKELL
高度プログラミング演習 (11).
標準入出力、変数、演算子、エスケープシーケンス
コンパイラ 2012年10月11日
アルゴリズムとデータ構造 補足資料6-1 「サンプルプログラムcat1.c」
PROGRAMMING IN HASKELL
情報処理Ⅱ 2005年11月25日(金).
第10回 関数と再帰.
printf・scanf・変数・四則演算
プログラミング言語論 プログラミング言語論 演習7 解答と解説 演習7 解答と解説 1.
Presentation transcript:

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

Scheme Scheme Lispの方言の一つ (cf. Common Lisp, Emacs Lisp) リスト処理 対話環境・・・デバッグがしやすい 小さい言語仕様(50ページ).高い拡張性. C(C99)は538ページ Common Lisp(第2版)は1029ページ GC(ごみ集め) 継続オブジェクト ...

TUTScheme Schemeの実装の1つ. 湯淺先生,小宮先生(豊橋技科大)開発 利用手段 メディアセンターの端末 http://www.pro.ics.tut.ac.jp/~komiya/download/ から入手 Windows(Cygwin版もあり) Mac OS X RedHat Linux

処理系によっては(exit), (quit) 起動・終了 $ tus TUTScheme version 1.4g (C) Copyright Taiichi Yuasa … SC> (+ 3 4) 7 SC> (bye) Bye. $ 起動 終了 処理系によっては(exit), (quit)

対話環境の利用 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> (let ((x 10) (y 20)) (* x (+ x y))) 300 SC> x Error: x is an unbound symbol. ...

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

関数定義(2) 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 write関数の出力 システムの出力(評価値)

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

入出力関数(3) 入力関数 SC> (read) abcde SC> (begin (display ”input: ”) (fact (read))) input: 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〉) :割り算の余り (cf. modulo) 比較 (= 〈数値1〉 … 〈数値n〉) (< 〈数値1〉 … 〈数値n〉) (> 〈数値1〉 … 〈数値n〉) (<= 〈数値1〉 … 〈数値n〉) (>= 〈数値1〉 … 〈数値n〉)

代表的な組み込み関数(リスト) (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? 〈データ〉) (string? 〈データ〉)

その他の組み込み関数 ヘルプ機能(tus, guileなど) (apropos 〈文字列〉):〈文字列〉を含む組み込み関数、 スペシャルフォーム、マクロの一覧を表示する.

× レポートについて ソースコードは手書き厳禁! 適当なところで改行.インデント(emacs推奨). コメント(‘;’を使う)もできるだけつけること. × (define (square x) (write (list ’x x)) (newline) (* x x))

○ レポートについて ソースコードは手書き厳禁! 適当なところで改行.インデント(emacs推奨). コメント(‘;’を使う)もできるだけつけること. ○ (define (square x) (write (list ’x x)) ; 追加 (newline) ; 追加 (* x x))

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