kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

Reasoned Schemer (001) Forewordとか

 『The Reasoned Schemer』買いました

The Reasoned Schemer (MIT Press)

The Reasoned Schemer (MIT Press)

  • 作者: Daniel P. Friedman,William E. Byrd,Oleg Kiselyov,Jason Hemann,Duane Bibby,Guy Lewis Steele Jr.,Gerald Jay Sussman,Robert A. Kowalski
  • 出版社/メーカー: The MIT Press
  • 発売日: 2018/03/09
  • メディア: ペーパーバック
  • この商品を含むブログを見る
 

 以下Theは省略

Scheme手習い』、『Scheme修行』、『定理証明手習い』と読んできて、
この『Reasoned Schemer』を読めばなんとなくコンプリート気分になれるはず
(ほかにもLittleナントカシリーズは出てるようなんですけど)

日本語訳は知ってる限り出てないみたいなのでこれだけ英語版

ちょうどSecond Editionが出たところだったのでタイミングもいい感じ

順序的には『Reasoned Schemer』が出てから『Little Prover』(定理証明手習い)が
出てるんですがたぶん順番が入れ替わっても問題ないんじゃないかな

さて『定理証明手習い』のときは先を読まずにいきなり動かしたり考えたりして
それはそれでちょっとスリリングだったりしたわけですが今回はいったん読み切る
ところまでやろうと思ってます
ちょっと積みすぎてるので!

Foreword

Guy Steele Jr.とGerald Jay SussmanのForeword

ForewordとPrefaceって何が違うんだとふと思ってちょっと調べてみたら
Forewordは作者以外でその分野の権威みたいなひとがこの本いいですよ、というもので
Prefaceは作者がどうしてこの本を書いたのか書くところってことらしいです
たいていForewordの方が高尚なお話になってる気がするのはそういうわけかな

メノンを引き合いに出して、会話の形で教えるのはいいやり方だと言ってます

  • Reasoned Schemerでは、関数型プログラミングを土台としてrelational programmingの基礎を学ぶ
  • Relational methodを効果的に使えるようになる
  • 関数型の基礎の上にエレガントなrelational languageを組み立てられるようになる

Prologみたいなものと思ってたので論理プログラミングかと思いましたがrelational programmingっていうのか
たぶん似たようなものなんだろうけど
日本語ではどう訳されてるのかな?あまり心当たりがない
「関係」とか「関係型」って約していくことにする

Preface

  • Reasoned Schemerでは、数学的な関数を一般化した、関係に対応する関係型プログラミングの考え方を提示する
  • たとえばsquare0(4, 16)は4と16をsquare0で関係づける、と言った意味

そういう意味の関係なのか

  • 引数を与えられた関係をゴールと呼ぶ
  • ゴールは、成功したり失敗したり値なしだったりする

goal、success、fail、have no value
もう解説始まってる?

  • square0(3, x)xを9に結びつけて成功するしsquare0(y, 9)はyが-3や3と結びついたときに成功する
  • square0(w, v)とするとすべての関係をすべて列挙しようとする
  • というように、関係はとても柔軟に使える

この本のテーマは3つ

  • 関係とゴールを理解して使えるようになる(第1章〜第8章)
  • 純粋でないなvariantを実現するために関係でない演算子を使う(第9章)
  • Schemeで関係型プログラミング言語を実装する(第10章、付録A)

関係型プログラミングでは、どうやってやるかではなくて、何がほしいかを書く
だから

  • +0演算子は足し算だけでなく引き算もできるし、*0素因数分解にも使える
  • log0は対数を求めるだけでなく底や累乗も求められる

さっきから0がついてるけど0を足すとかいう意味じゃなくて何か他の意味っぽいよ
書体が紛らわしくてoかと思った

  • 関係的な思考は、計算を理解するもうひとつの方法であり、小さい低レベルな言語で表現することができる

ラムダみたいな?

  • 1章ではこれらの基礎的な記法を学んだあと、もうすこし読みやすい文法に切り替える
  • 前提とするのはリストと再帰と関数に慣れていることだけ

Acknowledge

スルー

Since the First Edition

First Edition持ってるわけじゃないしスルー
かなりごっそり変わっている感じではある

Afterword

  • 小学校や中学校でもコンピューター・テクノロジーを学ぶことが重要になってきた
  • でもプログラミング言語もたくさんあって、先生は大変
  • 計算機的思考を、単なる計算だけでなくあらゆる分野の問題を解決する問題解決のスキルとして教えようとすればなおさら
  • プログラミング言語だけでなく、手続き的・宣言的・オブジェクト指向的など思考方法まで決めなければならないのだから
  • Reasoned Schemerは関数型プログラミングと関係型プログラミングがいかに深く関係しあっているかを示すことによってこの状況に貢献する

いい話