Contenu connexe
Similaire à Functional Pearl + Brainfuck (14)
Plus de Eita Sugimoto (10)
Functional Pearl + Brainfuck
- 10. かいせつ
文字列として
読み込む
source code
parse
AST
execute
I/O
- 12. かいせつ
source code
データを整形
Parsec (実行しやすく)
parse
AST
execute
I/O
- 18. ところで
source code
parse
• 「Haskellは純粋関数型」
AST
• どういう意味?
execute
I/O
- 20. 副作用とは
• int power (int x) {return x * x;}
• これは副作用がない
• int power2 (int x) {printf(“hoge”); return x * x;}
• これには副作用がある
- 21. 副作用とは
• int power2 (int x) {printf(“hoge”); return x * x;}
• hoge と外部に出力している
• これは返す値には関係がない!
- 22. たとえば
int main() {
int x = power2(5);
printf(“%d¥n”, x);
• 右のコードを動かす
}
• 関数の使用者が単に 5^2 を計算したいだけなら?
•→ hoge の表示は計算に「無関係な作用」である
- 23. ここで問題です
int main() {
• 右のmain関数において
int x = power(5);
printf(“%d¥n”, x);
• 「副作用」は存在するか?
}
- 24. あります
int main() {
int x = power(5);
printf(“%d¥n”, x);
• 計算結果を表示してる
}
•→ main関数が「外」の状態を変更している
- 25. なくしたければ
int main() {
• こうすればいい! int x = power(5);
}
• 外部の状態を変更しない
• (無意味)
- 27. ここで問題です
source code
parse
• 右の過程において
AST
• 「副作用」のある部分は?
execute
I/O
- 29. ANSWER
source code
parse
• 答えは右図 AST
execute
I/O
- 30. 「分離」
source code
• Haskellには「IOモナド」と parse
いう概念がある
AST
• ここでは「箱」としてイ
execute
メージしてください
I/O
- 31. 「分離」
source code
parse
• 非純粋な関数を隔離する
AST
•→ IOモナドという箱に入
れる IO Monad execute
I/O
- 32. 「分離」
source code
parse
• 副作用は箱の外には及ばな
AST
い!
IO Monad execute
I/O
- 38. 例えば
• [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] というリスト、ポインタは 7
•→ ([6, 5, 4, 3, 2, 1, 0], [7, 8, 9])
• リスト = ジッパー, ポインタ = チャック
Notes de l'éditeur
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n