Microsoft PowerPoint - 2-LispProgramming-full

Similar documents
r3.dvi

連立1次方程式Ax=bの解法:公式にしたがって解くのは,計算量大

相続支払い対策ポイント

150423HC相続資産圧縮対策のポイント

ハピタス のコピー.pages

Copyright 2008 All Rights Reserved 2

初心者にもできるアメブロカスタマイズ新2016.pages

- 2 Copyright (C) All Rights Reserved.

Copyright All Rights Reserved. -2 -!

Microsoft Word - 最終版 バックせどりismマニュアル .docx

untitled

Ⅴ 古陶器にみる装飾技法

健康保険組合のあゆみ_top

リバースマップ原稿2

P. 2 P. 4 P. 5 P. 6 P. 7 P. 9 P.10 P.12 P.13 P.14 P.14 P.15 P.17 P.18 P.20 P P P P P.25 P.27 P.28 Copyright 2016 JAPAN POST BA

やよいの顧客管理

弥生給与/やよいの給与計算

弥生 シリーズ

弥生会計 プロフェッショナル/スタンダード/やよいの青色申告

弥生会計/やよいの青色申告

弥生会計 ネットワーク/プロフェッショナル2ユーザー


Copyright 2008 NIFTY Corporation All rights reserved. 2

( ) [2] H 4 4! H 4 4! (5 4 3 )= = Fortran C 0 #include <stdio.h> 1 #include

Copyright 2006 KDDI Corporation. All Rights Reserved page1

1000 Copyright(C)2009 All Rights Reserved - 2 -

! Copyright 2015 sapoyubi service All Rights Reserved. 2

report03_amanai.pages

report05_sugano.pages

untitled

Z...QXD (Page 1)

- 2 Copyright (C) All Rights Reserved.

dekiru_asa

how-to-decide-a-title

Copyright Qetic Inc. All Rights Reserved. 2

DC9GUIDEBook.indb

Releases080909

URL AdobeReader Copyright (C) All Rights Reserved.


Copyright 2010 Sumitomo Mitsui Banking Corporation. All Rights Reserved.

Solibri Model Checker 9.5 スタードガイド

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

20 180pixel 180pixel Copyright 2014 Yahoo Japan Corporation. All Rights Reserved.

untitled

Copyright (C) 2007 noroiya.com.all Rights Reserved. 2

Copyright 2017 JAPAN POST BANK CO., LTD. All Rights Reserved. 1


% 11.1% +6.% 4, % %+12.2% 54,16 6.6% EV7, ,183 Copyright 216 JAPAN POST GROUP. All Rights Reserved. 1

mnal_HDR4ex_5ex.pdf



1

A

2

展示会レポート修正

KDDI

PowerPoint プレゼンテーション

2

キャバ嬢口説きテンプレ

オートマトンと言語

STARTプログラム.indd

数理.indd

IP IP All contents are Copyright (c) All rights reserved. Important Notices and Privacy Statement. page 2 of 39

PowerPoint プレゼンテーション

2007 Indie s Movie Project. All Rights Reserved. 02

ネットワーク設定マニュアル(Windows Vista編)

PLQ-20 取扱説明書 詳細編

MultiPASS B-20 MultiPASS Suite 3.10使用説明書

サービス付き高齢者向け住宅賠償責任保険.indd

1

Copyright 2009, SofTek Systems, Inc. All rights reserved.

Transcription:

2013 年 5 月 31 日 Lisp プログラミング入門 西田豊明 Copyright 2013 Toyoaki Nishida All Rights Reserved.

今回あらすじ 1. Lisp の実践的な使い方を学習する. 2. Lisp インタープリタの動かし方, 電卓的使い方, 関数定義, 条件分岐,S 式の基本操作, プログラミング手法, プロトタイピング法などを中心に解説する. 3. チューリングマシンのシミュレータの構成方法を例にプログラミングの実際を学習する.

Lisp プログラミングの流れ 表現 人工知能プログラム 私の人工知能理論 解釈実行 表示 インタープリタ Gnu Common Lisp

情報の流れ 入力テープとヘッド位置の外部表現 チューリングマシンの状態遷移機械の外部表現 入力テープ左 ( 逆順 ) ヘッド位置のマス目の内容入力テープ右現在状態 シミュレータ チューリングマシンの状態表示

((start q0) 初期状態がq0である (terminal q5) 停止状態はq5である. (states 以下では, 各状態における状態遷移規則を表す (q0 (0 (Right) q1)) 状態 q0で, 0を見たらヘッドを右に移動し, 状態 q1に遷移 (q1 (0 (Right) q1) 状態 q1で, 0を見たらヘッドを右に移動し, 状態 q1に遷移 (1 B q2)) 状態 q1で, 1を見たらBと書き換え, 状態 q2に遷移 (q2 (A (Left) q2) 状態 q2で, Aを見たらヘッドを左に移動し, 状態 q2に遷移 (B (Left) q2) 状態 q2で, Bを見たらBと書き換え, 状態 q2に遷移 (0 A q3)) 状態 q2で,0を見たらaと書き換え, 状態 q3に遷移 (q3 (1 B q2) 状態 q3で,1を見たらbと書き換え, 状態 q2に遷移 (A (Right) q3) 状態 q3で,aを見たらヘッドを右に移動し, 状態 q3に遷移 (B (Right) q3) 状態 q3で,bを見たらヘッドを右に移動し, 状態 q3に遷移 (_ (Left) q4)) (q4 (A (Left) q4) 状態 q4で,aを見たらヘッドを左に移動し, 状態 q4に遷移 (B (Left) q4) 状態 q4で,bを見たらヘッドを左に移動し, 状態 q4に遷移 ( q5)))) 状態 q4で, 空白 _ を見たら, 状態 q5に遷移 状態 q3 で, 空白 _ を見たらヘッドを左に移動し, 状態 q4 に遷移

変数 input 入力テープとヘッド位置の外部表現 tm チューリングマシンの状態遷移機械の外部表現 left-stack current-cell right-stack current-state 入力テープ左 ( 逆順 ) ヘッド位置のマス目の内容入力テープ右現在状態 test シミュレータ (print による副作用 ) チューリングマシンの状態表示

準備 1 input tm (let* ( [1] 入力テープとヘッド位置の外部表現 (current-state (second (assoc 'start tm))) ) ) チューリングマシンの状態遷移機械の外部表現 left-stack current-cell right-stack current-state 入力テープ左 ( 逆順 ) ヘッド位置のマス目の内容入力テープ右現在状態 tm=((start test q0) (terminal q5) ) [1] Current-state=q0 シミュレータ (print による副作用 ) チューリングマシンの状態表示

準備 2 input 入力テープとヘッド位置の外部表現 [1] (setq right-stack (cdr (member '* input))) [2] (cond (right-stack [2] (setq current-cell (car right-stack)) [2] (setq right-stack (cdr right-stack))) [2] (t (setq current-cell '_))) [3] (dolist tm (cell input) [3] (cond ((eq cell '*) (return))) [3] (push cell left-stack)) チューリングマシンの状態遷移機械の外部表現 left-stack current-cell right-stack current-state 入力テープ左 ( 逆順 ) ヘッド位置のマス目の内容入力テープ右現在状態 input=(1 test 2 3 * 4 5 6 7); left-stack=(); current-cell=nil; right-stack= () [1] right-stack=(4 5 6 7) [2] シミュレータ current-cell=4; right-stack=(5 6 7) [3] left-stack=(3 2 1) (print による副作用 ) チューリングマシンの状態表示

中心部分 input 入力テープとヘッド位置の外部表現 tm チューリングマシンの状態遷移機械の外部表現 left-stack current-cell right-stack current-state 入力テープ左 ( 逆順 ) ヘッド位置のマス目の内容入力テープ右現在状態 test シミュレータ (print による副作用 ) チューリングマシンの状態表示

典型的な状況例 入力テープ チューリングマシンの場合 0 0 0 1 1 1 状態遷移機械 開始 1/B, L A/A, L B/B, L 0/A, R A/A, R B/B, R A/A, L B/B, L q 0 q 1 q 2 q 3 q 4 q 5 1/B, L _/_, L _/_, R

チューリングマシン 典型的な状況例 入力テープ 0 0 0 B 1 1 状態遷移機械 開始 1/B, L A/A, L B/B, L 0/A, R A/A, R B/B, R A/A, L B/B, L q 0 q 1 q 2 q 3 q 4 q 5 1/B, L _/_, L _/_, R

中心部分 left-stack tm チューリングマシンの状態遷移機械の外部表現 current-cell right-stack current-state 入力テープ左 ( 逆順 ) ヘッド位置のマス目の内容入力テープ右現在状態 test シミュレータ tm=( (states (q1 (0 0 right q1) (1 B left q2)) ) ) left-stack=(0 0 0); current-cell=1; right-stack=(1 1) current-state=q1 [?] left-stack=(0 0); current-cell=0; right-stack=(b 1 1) current-state=q2

中心部分 tm=( (states (q1 (0 0 right q1) (1 B left q2)) ) ) left-stack=(0 0 0); current-cell=1; right-stack=(1 1) current-state=q1 [?] left-stack=(0 0); current-cell=0; right-stack=(b 1 1) current-state=q2 [1] (setq rules (cdr (assoc current-state states))) [2] (setq rule (assoc current-cell rules)) [3] (cond ((null rule) (return))) [4] (setq current-cell (second rule)) [5] (setq current-state (fourth rule)) [6] (case (third rule) [7] (right (cond [7] (right-stack [7] (setq left-stack `(,current-cell.,left-stack)) [7] (setq current-cell (car right-stack)) [7] (setq right-stack (cdr right-stack))) [7] (t (setq left-stack `(,current-cell.,left-stack)) [7] (setq current-cell '_)))) [7] (left (cond [7] (left-stack [7] (setq right-stack `(,current-cell.,right-stack)) [7] (setq current-cell (car left-stack)) [7] (setq left-stack (cdr left-stack))) [7] (t (setq right-stack `(,current-cell.,right-stack)) [7] (setq current-cell '_))))

プログラム test (defun test () (let* ((tm tm0) (input input-tm0) (left-stack nil) (right-stack) (current-state (second (assoc 'start tm))) (current-cell nil) (states (cdr (assoc 'states tm))) (terminal-states (cdr (assoc 'terminal tm))) (rules nil) (rule nil) (counter 1) (credits 1)) (setq right-stack (cdr (member '* input))) (cond (right-stack (setq current-cell (car right-stack)) (setq right-stack (cdr right-stack))) (t (setq current-cell '_))) (dolist (cell input) (cond ((eq cell '*) (return))) (push cell left-stack)) (loop (cond ((<= credits counter) (princ "How many more steps to go?") (terpri) (setq credits (read)) (cond ((<= credits 0) (return)) (t (setq counter 0)))) (t (setq counter (1+ counter)))) (princ "======================================") (terpri) (print-state left-stack current-cell right-stack current-state) (cond ((member current-state terminal-states) (princ "======================================") (terpri) (princ "*** Halt in a termnial state ***") (terpri) (princ "======================================") (terpri) (return))) ))) [1] (setq rules (cdr (assoc current-state states))) [2] (setq rule (assoc current-cell rules)) [3] (cond ((null rule) (return))) [4] (setq current-cell (second rule)) [5] (setq current-state (fourth rule)) [6] (case (third rule) [7] (right (cond [7] (right-stack [7] (setq left-stack `(,current-cell.,left-stack)) [7] (setq current-cell (car right-stack)) [7] (setq right-stack (cdr right-stack))) [7] (t (setq left-stack `(,current-cell.,left-stack)) [7] (setq current-cell '_)))) [7] (left (cond [7] (left-stack [7] (setq right-stack `(,current-cell.,right-stack)) [7] (setq current-cell (car left-stack)) [7] (setq left-stack (cdr left-stack))) [7] (t (setq right-stack `(,current-cell.,right-stack)) [7] (setq current-cell '_))))

ホームワーク 次のチューリングマシンの動作をシミュレートせよ 入力テープ 0 0 0 1 1 1 状態遷移機械 開始 0/X, R Y/Y, R 1/Y, L q 0 q 1 q 2 Y/Y, L 0/0, L X/X, R Y/Y, R _ / _, R q 3 q 4 Y/Y, R [Hopcroft 2001]

ホームワーク 次のチューリングマシンの動作を分析せよ 入力テープ _ 0 0 0 0 1 0 0 状態遷移機械 _ /_, R 1/1, R 開始 0/ _, R 1/1, R 0/1, L q 2 q 0 q 1 q 3 1/ _, R _ / _, L 0/0, L 1/1, L _ / _, R q 5 q 6 _ / 0, R q 4 0/ _, R 1/ _, R 0/ 0, L 1/ _, L [Hopcroft 2001]

ホームワーク 次のチューリングマシンの動作を分析せよ 入力テープ 0 0 0 1 0 0 状態遷移機械 開始 0/0, L _ /1, L q 0 q 1 _/ _, R q 2 _ / _, R q 11 1/1, R 0/0, L 1/1, L 0/ _, R 1/1, R q 3 q 4 0/X, R 1/1, R _ /0, L 0/0, L 1/1, L q 6 q 7 0/0, L q 5 1/1, L 1/1, R X/X, R 0/0, L 1/1, L q 8 q 9 q 10 X/0, L q 14 1/ _, R q 13 0/ _, R 1/ _, R q 12 _/ _, R [Hopcroft 2001]