Submit Search
Upload
PietでLISP処理系を書くのは難しい
•
0 likes
•
3,849 views
H
Hideaki Nagamine
Follow
2015年8月21日. YAPC::Asia Tokyo 2015 Day 1.
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 121
Download now
Download to read offline
Recommended
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
AtCoder Inc.
CG2013 01
CG2013 01
shiozawa_h
CG2013 02
CG2013 02
shiozawa_h
abc031
abc031
AtCoder Inc.
挿入ソート
挿入ソート
s5yata
ラインスタンプ作りの実演
ラインスタンプ作りの実演
Tetsuya Tatsumi
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説
AtCoder Inc.
Rの初歩: 6. グラフィックス
Rの初歩: 6. グラフィックス
Teiko Suzuki
Recommended
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
AtCoder Inc.
CG2013 01
CG2013 01
shiozawa_h
CG2013 02
CG2013 02
shiozawa_h
abc031
abc031
AtCoder Inc.
挿入ソート
挿入ソート
s5yata
ラインスタンプ作りの実演
ラインスタンプ作りの実演
Tetsuya Tatsumi
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説
AtCoder Inc.
Rの初歩: 6. グラフィックス
Rの初歩: 6. グラフィックス
Teiko Suzuki
Pietソースコード精読
Pietソースコード精読
Hideaki Nagamine
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
京大 マイコンクラブ
CUI3D
CUI3D
京大 マイコンクラブ
BFmeta
BFmeta
京大 マイコンクラブ
Ultra piet
Ultra piet
京大 マイコンクラブ
Pietでlisp処理系を書くのは難しい 進捗報告
Pietでlisp処理系を書くのは難しい 進捗報告
Hideaki Nagamine
お絵かきをはじめよう!
お絵かきをはじめよう!
京大 マイコンクラブ
Code Golf
Code Golf
Shinichiro Hamaji
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
Ryo Sakamoto
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
京大 マイコンクラブ
Pietのエディタを作った話
Pietのエディタを作った話
京大 マイコンクラブ
文字コード基礎論A
文字コード基礎論A
京大 マイコンクラブ
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
京大 マイコンクラブ
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
Ogushi Masaya
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜
SSII
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
Yusaku Kawaguchi
K010 appstat201201
K010 appstat201201
t2tarumi
Code iq×japanr 公開用
Code iq×japanr 公開用
Nobuaki Oshiro
Tokyo r30 beginner
Tokyo r30 beginner
Takashi Minoda
BotとWikiを使った試験的な並列プログラミング
BotとWikiを使った試験的な並列プログラミング
Takashi Yamanoue
Or seminar2011final
Or seminar2011final
Mikio Kubo
Optimization night 4_dp
Optimization night 4_dp
Kensuke Otsuki
More Related Content
Viewers also liked
Pietソースコード精読
Pietソースコード精読
Hideaki Nagamine
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
京大 マイコンクラブ
CUI3D
CUI3D
京大 マイコンクラブ
BFmeta
BFmeta
京大 マイコンクラブ
Ultra piet
Ultra piet
京大 マイコンクラブ
Pietでlisp処理系を書くのは難しい 進捗報告
Pietでlisp処理系を書くのは難しい 進捗報告
Hideaki Nagamine
お絵かきをはじめよう!
お絵かきをはじめよう!
京大 マイコンクラブ
Code Golf
Code Golf
Shinichiro Hamaji
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
Ryo Sakamoto
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
京大 マイコンクラブ
Pietのエディタを作った話
Pietのエディタを作った話
京大 マイコンクラブ
文字コード基礎論A
文字コード基礎論A
京大 マイコンクラブ
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
京大 マイコンクラブ
Viewers also liked
(13)
Pietソースコード精読
Pietソースコード精読
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
CUI3D
CUI3D
BFmeta
BFmeta
Ultra piet
Ultra piet
Pietでlisp処理系を書くのは難しい 進捗報告
Pietでlisp処理系を書くのは難しい 進捗報告
お絵かきをはじめよう!
お絵かきをはじめよう!
Code Golf
Code Golf
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
Pietのエディタを作った話
Pietのエディタを作った話
文字コード基礎論A
文字コード基礎論A
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
Similar to PietでLISP処理系を書くのは難しい
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
Ogushi Masaya
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜
SSII
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
Yusaku Kawaguchi
K010 appstat201201
K010 appstat201201
t2tarumi
Code iq×japanr 公開用
Code iq×japanr 公開用
Nobuaki Oshiro
Tokyo r30 beginner
Tokyo r30 beginner
Takashi Minoda
BotとWikiを使った試験的な並列プログラミング
BotとWikiを使った試験的な並列プログラミング
Takashi Yamanoue
Or seminar2011final
Or seminar2011final
Mikio Kubo
Optimization night 4_dp
Optimization night 4_dp
Kensuke Otsuki
Tokyo r27
Tokyo r27
Takashi Minoda
『こなへん』ができるまで ☆リリース直前編☆
『こなへん』ができるまで ☆リリース直前編☆
5mingame2
女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 2/2
女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 2/2
Satoru Tokuhisa
Chainerで学ぶdeep learning
Chainerで学ぶdeep learning
Retrieva inc.
Cython ことはじめ
Cython ことはじめ
gion_XY
Globally and Locally Consistent Image Completion
Globally and Locally Consistent Image Completion
harmonylab
pythonでオフィス快適化計画
pythonでオフィス快適化計画
Kazufumi Ohkawa
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
PFI Christmas seminar 2009
PFI Christmas seminar 2009
Preferred Networks
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
#経済学のための実践的データ分析 11. データのビジュアライゼーション
#経済学のための実践的データ分析 11. データのビジュアライゼーション
Yasushi Hara
Similar to PietでLISP処理系を書くのは難しい
(20)
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
K010 appstat201201
K010 appstat201201
Code iq×japanr 公開用
Code iq×japanr 公開用
Tokyo r30 beginner
Tokyo r30 beginner
BotとWikiを使った試験的な並列プログラミング
BotとWikiを使った試験的な並列プログラミング
Or seminar2011final
Or seminar2011final
Optimization night 4_dp
Optimization night 4_dp
Tokyo r27
Tokyo r27
『こなへん』ができるまで ☆リリース直前編☆
『こなへん』ができるまで ☆リリース直前編☆
女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 2/2
女子美術大学メディアアート演習ⅡB 2012 Fall 第2回 2/2
Chainerで学ぶdeep learning
Chainerで学ぶdeep learning
Cython ことはじめ
Cython ことはじめ
Globally and Locally Consistent Image Completion
Globally and Locally Consistent Image Completion
pythonでオフィス快適化計画
pythonでオフィス快適化計画
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
PFI Christmas seminar 2009
PFI Christmas seminar 2009
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
#経済学のための実践的データ分析 11. データのビジュアライゼーション
#経済学のための実践的データ分析 11. データのビジュアライゼーション
More from Hideaki Nagamine
フェーザとか
フェーザとか
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第4回
競技プログラミング練習会2015 Normal 第4回
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第3回
競技プログラミング練習会2015 Normal 第3回
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第1回
Hideaki Nagamine
競技プログラミング練習会2015 Normal 第2回
競技プログラミング練習会2015 Normal 第2回
Hideaki Nagamine
Gaucheでマクロを書こう
Gaucheでマクロを書こう
Hideaki Nagamine
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
Hideaki Nagamine
More from Hideaki Nagamine
(7)
フェーザとか
フェーザとか
競技プログラミング練習会2015 Normal 第4回
競技プログラミング練習会2015 Normal 第4回
競技プログラミング練習会2015 Normal 第3回
競技プログラミング練習会2015 Normal 第3回
競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第1回
競技プログラミング練習会2015 Normal 第2回
競技プログラミング練習会2015 Normal 第2回
Gaucheでマクロを書こう
Gaucheでマクロを書こう
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
On Lisp読書会2014 第3回「第2章 関数 (つづき)」
PietでLISP処理系を書くのは難しい
1.
PietでLISP処理系を書くのは難しい 2015.08.21 長嶺英朗
2.
この発表者について 長嶺英朗(Hideaki Nagamine) Twitter: @hnagamin 京大マイコンクラブ所属 Piet歴
4ヶ月くらい Scheme歴 2年くらい
3.
YAPC
4.
YAPC =Piet
5.
6.
今日の目標 • Pietについて知ってもらう • とにかくPietが楽しいってことを知ってもらう •
今日の夜Pietしたくなるように仕向ける • ここにいる全員をKMCに入れてuidを使い切る
7.
目次 1. Pietについてなんとなく分かる 2. 簡単なプログラムの実装 3.
PietでLISP処理系を作る
8.
1.Pietについてなんとなく分かる
9.
Pietを知っていた方
10.
Piet書いたことがある方
11.
Pietを業務で使っている方
12.
LISPを業務で使っている方
13.
Piet • David Morgan-Marが考案した 難解プログラミング言語 •
スタック指向
14.
Piet • David Morgan-Marが考案した 難解プログラミング言語 •
スタック指向 • 画像がソースコード
15.
画像がソースコード
16.
画像がソースコード
17.
画像がソースコード
18.
言語仕様
19.
命令 • Pietのもう一つの特徴はその豊富な命令セット • 難解言語のくせに17種類も命令がある –
8 << 17
20.
命令 • 命令はブロック間の色の差で表される – 6*3-1
= 17 * ADD DIV GREATER DUP IN(C) PUSH SUB MOD POINTER ROLL OUT(N) POP MUL NOT SWITCH IN(N) OUT(C)
21.
命令(入出力) • in(number), in(character) –
標準入力からread • out(number), out(character) – 標準出力へwrite とにかく便利
22.
命令(演算) • add, subtract,
multi, divide – 四則演算。2個popして計算結果をpush • greater – 2個popして(x<y?1:0)をpush • not – 1個pop(xとする)して(x==0?1:0)をpush
23.
Direction PointerとCodel Chooser •
Pietのプログラムは点がソースコード上を 縦横無尽に駆け回ることで実行される • この駆け回り方を決めるのがDPとCC – 点はDirection Pointerの方向に向かって最も Codel Chooserの向きに位置している点に移 動する
24.
この辺は「Pietのエディタを作った話」 を読むといいでしょう
25.
26.
右のプログラムを例に なんとなく説明します なお、このソースコード は2数の最大公約数を 求めるものです 動作例
27.
右のプログラムを例に なんとなく説明します ”24 60”を入力したとき のことを考えます 動作例
28.
プログラムの実行は ソースコードの左上から 始まります 動作例 DP:→ CC:左 [] Input(number)
29.
は数字の入力を 行います スタックに24が乗ります 動作例 DP:→ CC:左 [24] Input(number)
30.
も数字の入力を 行います スタックに60が乗ります 動作例 DP:→ CC:左 [24,60] Input(number)
31.
も数字の入力を 行います スタックに60が乗ります こんな感じで続きます 動作例 DP:→ CC:左 [24,60] Input(number)
32.
Duplicateはスタックの 先頭要素をコピーして 新しく乗せます 動作例 DP:→ CC:左 [24,60,60] duplicate
33.
次に行くコードブロック には2通り考えられます 動作例 DP:→ CC:左 [24,60,60] duplicate
34.
次に行くコードブロック には2通り考えられます しかしCodel Chooserが 左なので、進行方向に 対してもっとも左側の ブロックが選ばれます 動作例 DP:→ CC:左 [24,60,60] duplicate
35.
これはpushです 3が乗せられるのは、 赤いブロックの大きさが 3だからです 動作例 DP:→ CC:左 [24,60,60,3] push
36.
これもpushです 1が乗ります 動作例 DP:→ CC:左 [24,60,60,3,1] push
37.
次に行くべきところは 行き止まりです 動作例 DP:→ CC:左 [24,60,60,3,1] push
38.
このとき、次の手順で DPとCCが変わります CC変更→DP90度右回転 →CC変更→DP90度右… 動作例 DP:→ CC:右 [24,60,60,3,1] push
39.
8回行うと元の状態に 戻り、そこでプログラム が終了します 動作例 DP:→ CC:右 [24,60,60,3,1] push
40.
この場合CCが変わっても まだ行き止まりなので、 さらにDPが変わります 動作例 DP:↓ CC:右 [24,60,60,3,1] push
41.
これはrollです rollは2引数をとり、 その数に応じて スタックの要素を回転 させます 動作例 DP:↓ CC:右 [60,24,60] roll
42.
[24,60,60,3,1] [60,24,60] ↓
43.
modは剰余を返します 動作例 DP:↓ CC:右 [60,24] mod
44.
duplicate 動作例 DP:↓ CC:右 [60,24,24] duplicate
45.
notは(x==0?1:0) みたいなものです 動作例 DP:← CC:左 [60,24,0] not
46.
switchは先頭要素を 取りだして、 その回数だけCCを 変更します 0なので何も起きません 動作例 DP:← CC:左 [60,24] switch
47.
switchは先頭要素を 取りだして、 その回数だけCCを 変更します 0なので何も起きません 動作例 DP:← CC:左 [60,24] switch
48.
よってこっちに進みます duplicate 動作例 DP:← CC:左 [60,24,24] duplicate
49.
黒は行き止まりなので 上に進みます 白いブロックはただ通 り抜けます このとき何もしないと いう仕様になってます 動作例 DP:↑ CC:右 [60,24,24] (none)
50.
push 3 動作例 DP:→ CC:左 [60,24,24,3] push
51.
push 1 動作例 DP:→ CC:左 [60,24,24,3,1] push
52.
roll 3,1 動作例 DP:↓ CC:右 [24,60,24] roll
53.
mod 動作例 DP:↓ CC:右 [24,12] mod
54.
duplicate 動作例 DP:↓ CC:右 [24,12,12] duplicate
55.
not 動作例 DP:← CC:左 [24,12,0] not
56.
switch 動作例 DP:← CC:左 [24,12] switch
57.
duplicate 動作例 DP:← CC:左 [24,12,12] duplicate
58.
何もしません 動作例 DP:↑ CC:右 [24,12,12] (none)
59.
push 3 動作例 DP:→ CC:左 [24,12,12,3] push
60.
push 1 動作例 DP:→ CC:左 [24,12,12,3,1] push
61.
roll 3,1 動作例 DP:↓ CC:右 [12,24,12] roll
62.
mod 動作例 DP:↓ CC:右 [12,0] mod
63.
duplicate 動作例 DP:↓ CC:右 [12,0,0] duplicate
64.
not 動作例 DP:← CC:左 [12,0,1] not
65.
switch ここでCCが変わります 動作例 DP:← CC:右 [12,0] switch
66.
すると、進行方向右側は こっちなので黄色のブ ロックに進みます dup→not→switchや dup→not→pointerなど こういう処理は頻出です 動作例 DP:← CC:右 [12,0] switch
67.
あとは、popしてoutput するだけです “12”と出力されます 動作例 DP:← CC:右 [] output(number)
68.
赤いブロックに一度 入ってしまうとDP/CCに 関係なく出られません ここでプログラムが 終了します 動作例
69.
はい
70.
環境
71.
環境 • インターネットにPiet処理系がいっぱいある • いくつかかいつまんで紹介します
72.
PietDev • ブラウザ上で動く • エディタとして使うとちょっとつらい
73.
Pidet • KMC現代表のID:damaが作った開発環境 • とにかく便利、細かい親切がいっぱいあって とにかく便利
74.
Pidet • KMC現代表のID:damaが作った開発環境 • とにかく便利、細かい親切がいっぱいあって とにかく便利 •
非公開なので、入手したい方はKMCに入会 してください
75.
はい
76.
cpan Piet::Interpreter
77.
Piet::Interpreter • Piet処理系のPerl実装 • コマンドラインから使える •
in(number)が整数を読み込んでない…?
78.
2.簡単なプログラムの実装
79.
CGIアプリケーション
80.
CGIアプリケーション
81.
CGIアプリケーション #!/usr/bin/perl print `piet helloworld.png`;
82.
逆ポーランド電卓
83.
逆ポーランド電卓 • “1 2
+”を入力したら3を出力するようなやつ • IN(C) で1文字ずつ見て、数字だったらスタック に積み、演算子だったらスタックから2つ取り 計算結果を積む処理をひたすら繰り返す
84.
逆ポーランド電卓
85.
3.PietでLISP処理系を作る
86.
この章で作るLISP • λ式と整数を扱う – リストとかは頑張ってエンコードしてください •
マクロなし • defineなし – 頑張ってλ式使ってください
87.
文法のイメージ <プログラム> := <S式>
“¥n” <S式> := <要素> | “(“ <S式>+ ”)” <要素> := <整数> | <λ式> | <演算子> <λ式> := “<“ <変数> <S式> “>” <整数> := [0-9]+ <変数> := [^+-*/()<>0-9¥n] <演算子> := “+” | “-” | “*” | “/”
88.
プログラム例 • 100 • <x
x> • (+ 20 (* 20 30)) • ((<f <x (f (f x))>> <x (+ x x)>) 10)
89.
戦略 • 最も左側の適用から処理していく – 閉じ括弧を見つけるたびに、対応する開き括弧の 次の要素を見てその値に応じて分岐する –
<なら関数適用、[+-*/]なら整数の計算
90.
スタックの扱い • 仮想的に2つのスタックを使う – 文字列用と環境用 •
スタック上には整数しか保存できないので、 下位2ビットを使って頑張る • 下位ビットを使うとmodが使えて便利 00: 整数 01: 文字 10: 制御用の値 11: 変数名
91.
環境 • |<変数名> <値>
形式で変数-値ペアを保存 • 適用を見つけるたびに環境に突っ込む • 入力文字列に!を適当に挿入し、!を再び読み 取ったとき環境のトップにあるペアをpopする – 例: ((<x (+ x 2)> )
92.
関数 • 入力文字列をそのまま 保存 • 適用されるたびに: –
本体を取り出して置換 – 環境にペアを保存 (<x (+ x x)> 42) ¥ (+ x x) ¥|x 42
93.
変数評価 • 環境をrollしながら変数を探す • この時、もっとも上に積まれている変数を選ぶ •
面倒なので変数がないときは無限ループ – 当然の報い – ¥に到達したらエラーにするみたいな処理は可能
94.
大丈夫その設計? • Funarg問題を抱えていてとにかく厳しい • λ式を環境に突っ込むときに内部の変数を ちゃんと展開すればできる…? –
良い方法が思いつきません – つよい人のアドバイスをお待ちしております
95.
ツール
96.
ソースコード自動生成 • 自動生成の助けを借りる • Pietで直にLISPを実装するのには 人生は短すぎる
97.
nna774/piet-automata
98.
nna774/piet-automata 中間言語PASからPietのソースコードを生成する PUSH 1 DUP ADD PUSH 1 SUB OUTN
99.
充実した命令セット • PUSH/POP/DUP/ROLL • ADD/SUB/MUL/DIV/MOD/NOT/GREATER •
INN/INC/OUTN/OUTC • HALT/LABEL/JMP/JEZ
100.
充実した命令セット • PUSH/POP/DUP/ROLL • ADD/SUB/MUL/DIV/MOD/NOT/GREATER •
INN/INC/OUTN/OUTC • HALT/LABEL/JMP/JEZ
101.
充実した命令セット HALT プログラムを終了する。
102.
充実した命令セット LABEL <name> JMP <name> JMP
<name>するとLABEL <name>に飛ぶ • goto的な
103.
充実の命令セット JEZ <name> (=JMP Equal
Zero)スタックの先頭要素を取り、 それが0ならLABEL <name>に飛ぶ
104.
primenumber/pasxx
105.
primenumber/pasxx • PASにコンパイルされる言語 – AltPAS的な立ち位置 •
仮想的に複数のスタックを扱える
106.
複数のスタックを扱える [[10,20,30,40], [50,60]] [10, 20,
30, 40, 4, 50, 60, 2, 8]
107.
さらに充実した命令セット • PUSH/POP/DUP/ROLL • ADD/SUB/MUL/DIV/MOD/NOT/GREATER •
INN/INC/OUTN/OUTC • HALT/LABEL/JMP/JEZ • TOGGLE/NEW
108.
さらに充実した命令セット • PUSH/POP/DUP/ROLL • ADD/SUB/MUL/DIV/MOD/NOT/GREATER •
INN/INC/OUTN/OUTC • HALT/LABEL/JMP/JEZ • TOGGLE/NEW
109.
充実した命令セット NEW 新しい空のスタックをひとつ作る。
110.
充実した命令セット TOGGLE スタックの順番をひとつ回転させる。回転は ROLLと同じ要領で、一番上のスタックを一番下 に移動させ他のスタックを一つずつ上にする。
111.
[[10,20],[],[30,40,50],[60]] [[60],[10,20],[],[30,40,50]]
112.
他にもいろいろある • nna774/piet-testutil • 1995hnagamin/pas-interpreter
113.
…で、実装できたの? • とにかくバグりまくってる • 環境を片付ける用の”!”を適当につけまくった せいで変数が消失しまくっている –
((<f <x (f (f x))> <x (+ x x)>) 10)の 外側のfを評価しようとしたときにはfの束縛が消 えている
114.
とにかく厳しい
115.
とにかく厳しい
116.
とにかく厳しい
117.
118.
現況 • 次の文字列をちゃんと計算できる – (*
(+ 1 2) (- 13 3)) – (<x (+ x x)> 100) • λ式がネストすると変数と環境周りでいっぱい 問題が起こる
119.
今後の展望
120.
今後の展望 • 環境をちゃんと扱えるようにする • piet-automataやpasxxの発展 –
より少ない面積のソースコードを生成したい – マクロがほしい – 関数がほしい – とにかく抽象化の仕組みがほしい
121.
まとめ Piet最高! 一番好きな言語です
Download now