Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
t-sin
461 views
続・SECDマシン
SECDマシンについて理解に進捗があったのでその発表です。
Software
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 39
2
/ 39
3
/ 39
4
/ 39
5
/ 39
6
/ 39
7
/ 39
8
/ 39
9
/ 39
10
/ 39
11
/ 39
12
/ 39
13
/ 39
14
/ 39
15
/ 39
16
/ 39
17
/ 39
18
/ 39
19
/ 39
20
/ 39
21
/ 39
22
/ 39
23
/ 39
24
/ 39
25
/ 39
26
/ 39
27
/ 39
28
/ 39
29
/ 39
30
/ 39
31
/ 39
32
/ 39
33
/ 39
34
/ 39
35
/ 39
36
/ 39
37
/ 39
38
/ 39
39
/ 39
More Related Content
PDF
SECDマシン 実装と動きとその他もろもろについて
by
t-sin
PDF
これから Haskell を書くにあたって
by
Tsuyoshi Matsudate
PDF
ChatGPT 人間のフィードバックから強化学習した対話AI
by
Shota Imai
PPTX
DockerコンテナでGitを使う
by
Kazuhiro Suga
PDF
CTF for ビギナーズ バイナリ講習資料
by
SECCON Beginners
PDF
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
by
Kohei Nakamura
PDF
Osc2015北海道 札幌my sql勉強会_波多野_r3
by
Nobuhiro Hatano
PPTX
ゲームの通信をつくる仕事はどうなるのだろう?
by
Kengo Nakajima
SECDマシン 実装と動きとその他もろもろについて
by
t-sin
これから Haskell を書くにあたって
by
Tsuyoshi Matsudate
ChatGPT 人間のフィードバックから強化学習した対話AI
by
Shota Imai
DockerコンテナでGitを使う
by
Kazuhiro Suga
CTF for ビギナーズ バイナリ講習資料
by
SECCON Beginners
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
by
Kohei Nakamura
Osc2015北海道 札幌my sql勉強会_波多野_r3
by
Nobuhiro Hatano
ゲームの通信をつくる仕事はどうなるのだろう?
by
Kengo Nakajima
What's hot
PDF
目grep入門 +解説
by
murachue
PDF
PlaySQLAlchemy: SQLAlchemy入門
by
泰 増田
PDF
勉強か?趣味か?人生か?―プログラミングコンテストとは
by
Takuya Akiba
PDF
いつやるの?Git入門
by
Masakazu Matsushita
PDF
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
by
Kazuhide Okamura
PDF
直交領域探索
by
okuraofvegetable
PDF
組み込みでこそC++を使う10の理由
by
kikairoya
PDF
#logstudy 01 rsyslog入門
by
Takashi Takizawa
PDF
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
PDF
超実践 Cloud Spanner 設計講座
by
Samir Hammoudi
PDF
PostgreSQLアンチパターン
by
Soudai Sone
PDF
人と人の相性を考慮したシフトスケジューラ
by
鈴木 庸氏
PDF
Go初心者がGoでコマンドラインツールの作成に挑戦した話
by
dcubeio
PDF
工学系大学4年生のための論文の読み方
by
ychtanaka
PDF
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
by
Masahiro Nagano
PDF
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
by
SSII
PDF
pg_bigmと類似度検索
by
Masahiko Sawada
PDF
これからSpringを使う開発者が知っておくべきこと
by
土岐 孝平
PPTX
ランク6の俺がパズドラについて語る
by
tosaka 2
PDF
JIRAを使ったフツウのPJ実践
by
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
目grep入門 +解説
by
murachue
PlaySQLAlchemy: SQLAlchemy入門
by
泰 増田
勉強か?趣味か?人生か?―プログラミングコンテストとは
by
Takuya Akiba
いつやるの?Git入門
by
Masakazu Matsushita
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
by
Kazuhide Okamura
直交領域探索
by
okuraofvegetable
組み込みでこそC++を使う10の理由
by
kikairoya
#logstudy 01 rsyslog入門
by
Takashi Takizawa
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
超実践 Cloud Spanner 設計講座
by
Samir Hammoudi
PostgreSQLアンチパターン
by
Soudai Sone
人と人の相性を考慮したシフトスケジューラ
by
鈴木 庸氏
Go初心者がGoでコマンドラインツールの作成に挑戦した話
by
dcubeio
工学系大学4年生のための論文の読み方
by
ychtanaka
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
by
Masahiro Nagano
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
by
SSII
pg_bigmと類似度検索
by
Masahiko Sawada
これからSpringを使う開発者が知っておくべきこと
by
土岐 孝平
ランク6の俺がパズドラについて語る
by
tosaka 2
JIRAを使ったフツウのPJ実践
by
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
More from t-sin
PDF
謎の言語Forthが謎なので実装した
by
t-sin
PDF
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
by
t-sin
PDF
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
by
t-sin
PDF
One - Common Lispでもワンライナーしたい
by
t-sin
PDF
PythonでLispを実装した (evalつき)
by
t-sin
PDF
Inquisitor -Common Lispに文字コード判定を-
by
t-sin
PDF
バッテリー強奪! PythonをCommon Lispから使う
by
t-sin
PDF
Common lispでグラフィックアート
by
t-sin
PDF
Common Lispっぽいものをつくっています
by
t-sin
謎の言語Forthが謎なので実装した
by
t-sin
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
by
t-sin
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
by
t-sin
One - Common Lispでもワンライナーしたい
by
t-sin
PythonでLispを実装した (evalつき)
by
t-sin
Inquisitor -Common Lispに文字コード判定を-
by
t-sin
バッテリー強奪! PythonをCommon Lispから使う
by
t-sin
Common lispでグラフィックアート
by
t-sin
Common Lispっぽいものをつくっています
by
t-sin
Recently uploaded
PPTX
JavaScript/TypeScript実力強化書 2章のアップデート Forkwell Library
by
Yoshiki Shibukawa
PDF
Gluesync:RDBMS、NoSQL,データレイク間のリアルタイム・データレプリケーション
by
株式会社クライム
PDF
20251122_OWASPNagoya_takei_ITU-T,X.1060,security
by
OWASP Nagoya
PDF
最高峰のストレージとバックアップ:ARTESCA+Veeam:統合型ソフトウェア
by
株式会社クライム
PDF
N2WS Backup & Recovery と Veeam Backup for AWS
by
株式会社クライム
PDF
Veeam&WasabiでトリプルV: クラウドへのランサムウエア対策の決定コンビ
by
株式会社クライム
JavaScript/TypeScript実力強化書 2章のアップデート Forkwell Library
by
Yoshiki Shibukawa
Gluesync:RDBMS、NoSQL,データレイク間のリアルタイム・データレプリケーション
by
株式会社クライム
20251122_OWASPNagoya_takei_ITU-T,X.1060,security
by
OWASP Nagoya
最高峰のストレージとバックアップ:ARTESCA+Veeam:統合型ソフトウェア
by
株式会社クライム
N2WS Backup & Recovery と Veeam Backup for AWS
by
株式会社クライム
Veeam&WasabiでトリプルV: クラウドへのランサムウエア対策の決定コンビ
by
株式会社クライム
続・SECDマシン
1.
続・SECDマシン @t-sin 2021-03-25 lispmeetup #96
2.
自己紹介 (t-sin) ● Common Lispがお好きなWebプログラマ ● 興味のあること –
言語処理系 – 音やグラフィクス ● SNS – GitHub: @t-sin – Twitter: @sin_clav
3.
発表の背景 ● lispmeetup #91でSECD機械の発表しました – https://www.slideshare.net/t-sin/secd ● 上の発表にもでてくるLispKit
Lisp本を読んでると 自分の理解が間違ってたことがわかったので ● SECD機械の正しい説明をします – 一部のみ誤りなので訂正を兼ねた復習です ● 前回答えられなかった質問も話します – dumとrapの命令は何のためにあるか
4.
もくじ ● LispKit LispとSECD機械の概要 – SECD機械の関数の引数
(訂正ポイント) ● dumとrap命令はなぜあるか (質問回答) ● おまけ: LispKit Lisp本のおもしろかった章 – 手続き型プログラムを関数型のそれに変換する話 – 並列化を実現する拡張を入れる話
5.
LispKit LispとSECD機械の概要
6.
LispKit Lisp本について ● Peter Henderson
“Functional Programming: Application and Implementation” – 関数型プログラミングの利点や方法論の解説 – 関数型プログラミング言語の実装に関するトピック – プログラム意味論や非決定性、並行性などのトピックもある ● 関数型プログラミングの説明では数学っぽい言語を使用 ● 機械が処理するための言語としてS式のプログラムが登場
7.
LispKit Lisp (1/3) ● Peter
Hendersonが著書内で定義したLisp処理系 ● 純粋関数型言語で教育用なので代入や入出力はない ● 特殊形式16個と定数式と関数適用がある ● この言語のターゲットアーキテクチャがSECD機械
8.
LispKit Lisp (2/3) ● 特徴 –
レキシカルスコープ – 第一級の関数オブジェクト ● 高階関数が使える – 関数の引数は1個のみ ← 前回発表の誤り ● 関数は固定長の引数を取れる
9.
LispKit Lisp (3/3) ● 16個の特殊形式 –
クォート: quote – 算術演算: add, sub, mul, div, rem – 比較演算: eq, lem – コンスセル系: cons, car, cdr, atom – フロー制御など: if, lambda, let, letrec
10.
SECD機械 ● ラムダ計算を機械的に実行するための抽象機械 – Peter Landinが提唱 ● Landinの原論文のSECD機械はとても抽象的 ● 機械語っぽい命令はLispKit
Lispのものが有名 – 初なのかは不明
11.
SECD機械の特徴 ● スタックマシン – データはすべてスタックに積む – 4本のスタックを持つ ● スタック以外に状態を持たない –
入出力もない
12.
SECD機械のスタック ● 4つのスタック – Stack: 命令や関数に渡すデータ置き場 –
Environment: 引数と値のマッピング – Control: 実行対象となる機械語列 – Dump: 関数適用や条件分岐時の復帰先を保持 ● スタックの実現にはコンスセルを用いる – ので、SECD機械語もコンスセルで構成される
13.
SECD機械の命令 ● 数値演算: add, sub,
mul, div, rem ● 比較演算: eq, leq ● コンスセル系: cons, car, cdr ● ロード系: ld, ldc, ldf ● フロー制御: sel, join ● 関数適用: ap, rtn, dum, rap
14.
dumとrap命令はなぜあるか
15.
SECD機械での再帰 (1/2) ● 自分自身を再帰の間参照し続けられればよい ● 再帰する関数をスターター関数に渡せば 引数に束縛されっぱなしになることを利用 ● dumとrapは不要
16.
SECD機械での再帰 (2/2) ● こういうイメージ(Common Lisp) これをSECD機械語でやるだけ CL-USER>
(funcall (lambda (f) (funcall f f 10)) (lambda (f n) (if (= n 1) 1 (* n (funcall f f (- n 1)))))) 3628800
17.
SECD機械での相互再帰 (1/2) ● 再帰する関数の定義時に他の関数が定義されて いる必要がある ● 単純な再帰で使ったテクニックは使えない ● LispKit Lispではletrecを用いる
18.
SECD機械での相互再帰 (2/2) ● LispKit Lispのletrec このletrecを実現するのにdumとrapが必要 (letrec
(even? 10) ; 本体 (even? . (lambda (n) ; 本体だけで有効な定義1 (if (eq n 0) t (odd? (- n 1))))) (odd? . (lambda (n) ; 本体だけで有効な定義2 (if (eq n 0) Nil (even? (- n 1))))))
19.
letrec実現に必要な知識 ● SECD機械における関数オブジェクト ● 環境(Eスタック)の構造 ● 通常の関数適用: ap命令 ● dumとrapのふるまい
20.
SECD機械の関数オブジェクト ● ldf命令を用いて定義する ● ldf命令によって関数オブジェクトがSスタックトップに置かれる – このときその時点のEスタックの内容 (環境)
がコピーされる ● 関数オブジェクトは以下2つの要素で構成される – 関数本体の機械語 – ldf実行時の環境 ldf (関数本体の機械語... rtn)
21.
SECD機械の環境 ● 関数の実引数リストのスタック ● たとえばこんな感じ ● 参照するときは位置(n番目リストのm番目)で指定する ● 引数の名前から位置を求める計算はSECD機械語への コンパイル時に済んでいると仮定する ;; 関数呼び出しが2段ネストしている状況 ((10) (<関数1>
10))
22.
通常の関数適用: ap命令 (1/2) ● こんな動作をする: –
関数と実引数リストをSスタックから取得 – 現在の実行コンテキスト(S, E, C)をDに退避 – Cスタックを関数の本体機械語に設定 – Eスタックを関数の環境に設定 – Eスタックトップに実引数リストをプッシュ
23.
通常の関数適用: ap命令 (2/2) ● 各スタックは以下のように変化する ;;
ap命令の実行前の状態 (S E C D) = ((本体コード . 関数の環境) (引数1 引数2)) (適用時点の環境) (ap 適用後のコード) (適用時点のダンプ)) ;; ap命令の実行前の状態 (S E C D) = (() ((引数1 引数2) 関数の環境 …) 本体コード ((適用後のコード 適用時点の環境 適用時点のダンプ)))
24.
dumとrapのふるまい: dum命令 ● 現在の環境にダミー値をプッシュする ● ダミー値はrapで置換するのでなんでもよい
25.
相互再帰を実現するには ● 再帰する関数の定義時に他の関数が定義されてい る必要がある →再帰する関数の環境に他の関数が入っている 必要がある ● 再帰する関数の環境にダミー値を入れておき あとで他の関数の入ったリストで置き換える
26.
dumとrapのふるまい: rap命令 (1/4) ● だいたいap命令と同じ –
関数と実引数リストをSスタックから取得 – 現在の実行コンテキスト(S, E, C)をDに退避 – Cスタックを関数の本体機械語に設定 – Eスタックを関数の環境に設定 – Eスタックのダミー値を実引数リストで置換 ● これでdumとrapの間で定義されたすべての関数の 環境に実引数リストが入る
27.
dumとrapのふるまい: rap命令 (2/4) ● rapの前後でのスタックの変化 ;;
ap命令の実行前の状態 (S E C D) = (((本体コード . (ダミー値 関数の環境)) (引数1 引数2)) (適用時点の環境) (rap 適用後のコード) (適用時点のダンプ)) ;; ap命令の実行前の状態 (S E C D) = (() ((引数1 引数2) 関数の環境 …) 本体コード ((適用後のコード 適用時点の環境 適用時点のダンプ)))
28.
dumとrapのふるまい: rap命令 (3/4) ● 注意すべき点 –
letrecでは複数の値や関数が定義される – ダミー値の置換はコンスセルのcar部を書き換えることで行われる ● replca関数などで – SECD機械の扱うオブジェクトはすべてコンスセルである ● 循環リストやコンスセルの共有も可能 ● dumの後に定義された関数のダミー値はrapですべて実引数リ ストに置き換わる
29.
dumとrapのふるまい: rap命令 (4/4) ● letrecを実現するには –
dum命令を実行し – 相互に再帰する関数を引数リストとして – 最初の関数適用をキックする関数を用意し – キックする関数をrapで呼ぶ ● letrecできあがり!!!!!
30.
LispKit Lisp本おまけ話 おもしろかった章の概要
31.
手続き型→関数型変換 (1/2) ● ALGOLのような手続き型言語の式・文を考える ● LispKit Lispでインタプリタを書く ● 手続き型の各式・文の関数型言語での対応物を考える –
式・文をLispKit Lispの関数に対応させる ● 状態から値への関数 – 表示的意味論というそうな
32.
手続き型→関数型変換 (2/2) ● フローチャートで表現されたプログラム – ループや分岐などでグラフになる ● フローチャートをループを含まない形にする –
ループを切って再帰にする ● LispKit Lispの関数が得られる
33.
並行性の導入 ● 評価を遅延させられればコルーチンつくれる – 中断・再開ができる関数 ● delay/forceを関数で実現 – “On
Lisp”にもあるあの話 ● SECD機械全体を遅延評価するように改造 ● 遅延評価の威力を体感 (未読) – (コルーチンは……??)
34.
まとめ
35.
まとめ ● SECD機械の上には純粋関数型言語を構成できる ● dumとrap命令は相互再帰を実現するためにある ● LispKit Lisp本にはほかにも以下のことが書かれている – 手続き型プログラムを関数型のプログラムに変換できる –
遅延評価を導入すると並行性を入れられる、らしい…?
36.
追記 発表でもらったコメント等
37.
dum/rapなくても相互再帰できる ● 発表の質疑応答時にいただいたコメントより – 以下をSECD機械語に落としこむとできそう – – – – – dam/rapはプリミティブではない…! CL-USER>
(funcall (lambda (c) (funcall (car c) c 10)) (cons (lambda (c n) ; even? (if (zerop n) t (funcall (cdr c) c (- n 1)))) (lambda (c n) ; odd? (if (zerop n) nil (funcall (car c) c (- n 1)))))) T
38.
LispKit Lisp本 ● 実は邦訳がある (懇親会にて) –
Peter Henderson著 杉藤芳雄, 二木厚吉 訳『関数型 プログラミング <コンピュータ・サイエンス研究書 シリーズ 17>』
39.
並行性について ● 遅延評価を導入する方法以外にもいくつかある (懇親会にて) – LispKit Lisp本の非決定性の章にも関連する ● “第11回 クロージャによる超軽量並行プロセスの簡単実 装法
| 日経クロステック(xTECH)” https://xtech.nikkei.com/it/article/COLUMN/20070612/2742 31/
Download