kb84tkhrのブログ

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

「13歳の娘に語る ガロアの数学」 金重明

今ウチの娘は歴史系の本にいちばん興味がありましてそっち系もどんどん読んでほしいんですけど数学とかプログラミングとかにも興味を持ってほしいなあとそうすれば共通の話題ができるし それに数学とかプログラミングとかの考え方は大事だと思ってます数学と…

子供のゲーム

子供のゲームなんですけどねまあそんなにうるさくはいいたくないです自分もゲームは好きなんで でもあんまりそればっかりになるのも困りますほんとゲームって楽しくなるようにできてるんで アイカツフォンとやらのしょーもなさそうなゲームを延々とやってる…

スマホから書く練習

基本的にはPC・スマホは夜10時まで縛りをかけているので家で書こうとすると書けない言い訳になりかねない だからスマホからも書けるようにしておこう 達成!

気合は入れない

小さな習慣なんだからがんばろうとしない markdownで書こうとか下書きしようとか推敲しようとかAmazonのリンクを貼ろうとかできあがった記事をほかに保存しておこうとか もちろんやってもいいけど あとから更新もOKにしよう 「1行書く」以外のことはできるだ…

「小さな習慣」スティーブン・ガイズ

「小さな習慣」という本がありましてこの間本屋でふと見かけて買いました 目標:1日1行ブログを書く 達成! ととりあえず達成しておけば、あとは「おまけ」でもっとやるようになるてわけです なんかこれなら行けるんじゃないかと思って始めてみました実は…

(妄想)「ならば」の教え方

「数学ガール ゲーデルの不完全性定理」で「僕」がユーリに「ならば」を教える場面があります 「ねえ、馬鹿にしてない?たとえば一番上の行は《Aが偽で、Bが偽だったら、A⇛Bは真》という意味でしょ」 うんうんそこで「僕」が真理値表を使って教えてあげるん…

「Intro to App Development with Swift」

iBookに「Intro to App Development with Swift」という本があります日本語版は「Swiftによるアプリケーション開発:入門編」です Appleが自ら書いたSwiftによるiOSアプリ開発の入門書です まったくプログラミングしたことのない中学生あたりがターゲットだと…

Scheme修行(16) 第20章 店には何がある?(続きの続きの続き)

私の空気読みによると、なんかletやletrecは宿題ね、と言われているような気がする lambdaができてるからきっと簡単にできるはず えーとlambdaしてapplicationするということだから (define binds-of (lambda (x) (car (cdr x)))) (define letbody-of (lambd…

Scheme修行(15) 第20章 店には何がある?(続きの続き)

lambdaは手習いのvalueにもありましたが、set!が出てきた関係で 複数の式を書けるようにする必要があります (define *lambda (lambda (e table) (lambda (args) (beglis (body-of e) (multi-extend (formals-of e) (box-all args) table))))) クロージャの作…

第20章 店には何がある?(続き)

the-meaningです (define the-meaning (lambda (e) (meaning e lookup-in-global-table))) (define lookup-in-global-table (lambda (name) (lookup global-table name))) global-tableにおけるmeaningは特別ということでtheがついてるんでしょうね lookup-i…

Scheme修行(13) 第20章 店には何がある?

ついにScheme修行も最終章 あいかわらずよく意味の分からないタイトルで締めてくれます 第10章とおなじく、ここではschemeのインタプリタを作ります 今回はdefineが(letccも)実装されますのでそのままセルフで自分自身を実行することができるはず 今回もな…

Scheme修行(12) 第19章 宝石泥棒(続きの続き)

前回のwaddleはもともと再帰がややこしいところにlet/ccが入ったので なんだかよくわからないことになってましたが leaveとfillだけの話ならこんな感じでぴょんぴょんさせることができます (define A (lambda () (let/cc here (set! leave here) (display "A…

Scheme修行(11) 第19章 宝石泥棒(続き)

two-in-a-row?です (define two-in-a-row? (letrec ((W (lambda (a lat) (cond ((null? lat) #f) (else (let ((nxt (car lat))) (or (eq? nxt a) (W nxt (cdr lat))))))))) (lambda (lat) (cond ((null? lat) #f) (else (W (car lat) (cdr lat))))))) two-in…

Scheme修行(10) 第19章 宝石泥棒

deepです (define deep (lambda (m) (cond ((zero? m) (quote pizza)) (else (cons (deep (sub1 m)) (quote ())))))) (deep 6)としてやると((((((pizza))))))ができますが ((((((pizza))))))ではなく((((((mozzarella))))))を作るにはどうしたら いいでしょ…

Scheme修行(9) 第18章 我変わる、ゆえに我同じなり!

cons、car、cdrをlambdaで書いてしまいます (define kons (lambda (kar kdr) (lambda (selector) (selector kar kdr)))) (define kar (lambda (c) (c (lambda (a d) a)))) (define kdr (lambda (c) (c (lambda (a d) d)))) Schemeのコア中のコアと思っていた…

Scheme修行(8) 第17章 我変わる、ゆえに我あり!

ふたたびdeepM deepを内部に持つバージョンから始めます (define deepM (let ((Rs (quote ())) (Ns (quote ()))) (letrec ((D (lambda (m) (if (zero? m) (quote pizza) (cons (D (sub1 m)) (quote ())))))) (lambda (n) (let ((exists (find n Ns Rs))) (if…

Scheme修行(7) 第16章 位置について、セット、バン!

前回の代入では代入前の値は捨てられていましたが、今回は引数をため込んでいきます こんな関数で (define ingredients (quote ())) (define sweet-toothR (lambda (food) (set! ingredients (cons food ingredients)) (cons food (cons (quote cake) (quote…

Scheme修行(6) 第15章 大人と子供の違い・・・・・・

代入です set!はdefineされた変数に値を代入します と書くと先生に怒られるかもしれません 「名前xはaを参照しています」という言い方はここが初めてかな? こちらが正しい表現なんでしょう さっきまでaを参照していたxに、今度はbを参照させるというのがset…

Scheme修行(5) 第14章 名前をつけましょう(続き)

rember1*をいじっていきます 再掲 (define rember1* (lambda (a l) (letrec ((R (lambda (l) (cond ((null? l) (quote ())) ((atom? (car l)) (cond ((eq? (car l) a) (cdr l)) (else (cons (car l) (R (cdr l)))))) (else (let ((av (R (car l)))) (cond ((…

Scheme修行(4) 第14章 名前をつけましょう

やっとletがでてきます letをletrecよりletccより後でとりあげたのはどういうことなんでしょう? leftmost 一番左のアトムを探すleftmostです (define leftmost (lambda (l) (cond ((atom? (car l)) (car l)) (else (leftmost (car l)))))) これは引数に空リ…

Scheme修行(3) 第13章

第13章 ホップ、スキップ、ジャンプ 継続が出てきます intersectall 題材はintersectallです まずはintersectから (define intersect (lambda (set1 set2) (cond ((null? set1) (quote ())) ((member? (car set1) set2) (cons (car set1) (intersect (cdr se…

Scheme修行(2) 第12章

multirember 第12章「避難しましょう」ではまずmultiremberを題材にします (define multirember (lambda (a lat) (cond ((null? lat) (quote ())) ((eq? (car lat) a) (multirember a (cdr lat))) (else (cons (car lat) (multirember a (cdr lat))))))) mul…

Scheme修行(1) はじめに & 第11章

はじめに 「訳者まえがき」や「はじめに」はだいたいScheme手習いと似たようなことが書いてあるので さらっといきます 継続(continuation)と代入(set!)という新たな概念を使用してプログラミングの幅を広げている 継続はともかくとして、代入なんて、と思っ…

Scheme手習い(24) eval、またはvalue、またはmeaning(5)

普通のソースをdefineを使わないソースに変換する手法は 様々なシーンで役立つノウハウですのでまとめておきましょう(嘘 lambdaによる名前付け defineによる定義は、lambdaによる名前付けに書き換えることができます 修正前 (define A (lambda (a) (aaaaa))…

Scheme手習い(23) eval、またはvalue、またはmeaning(4)

でも、(define ...)はどうなのでしょう。 再帰はYコンビネータによって得られるので、必要はありません。 Yコンビネータによる変形を行うと、インタプリタ上でインタプリタを走らせることが可能であるということですか。 はい。でもそんなに悩まないでくださ…

Scheme手習い(22) eval、またはvalue、またはmeaning(3)

関数の呼び出し関係を整理してみました ちょっと細かい関数まで書きすぎたかな 以上

Scheme手習い(21) eval、またはvalue、またはmeaning(2)

いよいよ関数適用に入ります (define function-of car) (define arguments-of cdr) (define *application (lambda (e table) (ls-apply (meaning (function-of e) table) (evlis (arguments-of e) table)))) (define evlis (lambda (args table) (cond ((nul…

Scheme手習い(20) eval、またはvalue、またはmeaning

ついに最終章、ラスボス2です 小さいschemeの核にあたるもの、いわゆる?evalを作ります でもこの本ではvalueっていう名前になってます でもvalueは空っぽの環境を作るだけで実際の仕事の中心はmeaningという関数がやってます ラスボス2と言っても、Yコンビ…

Scheme手習い(19) Yコンビネータ(4)

Yコンビネータでいろいろな関数を動かしてみます (define Y (lambda (le) ((lambda (f) (f f)) (lambda (f) (le (lambda (x) ((f f) x))))))) 再帰しない関数を渡しても動くかな ((Y (lambda (add2) (lambda (n) (add1 (add1 n))))) 1) ⇛ 3 動いた! じゃあ…

Scheme手習い(18) Yコンビネータ(3)

関数を再帰させることができればYコンビネータも峠を越えたんじゃないでしょうか あとは、形を整えてやるだけのはずですから defineなしで再帰できるようになったlengthがこれ ((lambda (mk-length) (mk-length mk-length)) (lambda (mk-length) (lambda (l)…

Scheme手習い(17) Yコンビネータ(2)

defineなしで再帰を実現できたものの、わかった感が薄くて今ひとつ eternityの唐突感 (mk-length mk-length)の手品感 このあたりを解決しないと眠れそうにありません いえ寝ます いえ自分なりに納得感のある道を探してみます 厳密さよりも感覚的に納得できる…

Scheme手習い(16) Yコンビネータ

ラスボス1来ました Yコンビネータってのはこれ 正確には適用順Yコンビネータって言うらしいです (define Y (lambda (le) ((lambda (f) (f f)) (lambda (f) (le (lambda (x) ((f f) x))))))) 何がなんだかわかりません こんなの読んでふむふむとかわかっちゃ…

Scheme手習い(15) 部分関数と全関数(2)

部分関数と全関数の話その2 コラッツの関数と呼ばれるやつ 1なら終わり 偶数なら2で割る 奇数なら3を掛けて1を足す たったこれだけの関数なのに、必ず終わるかどうか、つまり全関数かどうかは証明されていません きっと全関数だろうとは思われてるみたい (d…

Scheme手習い(14) 部分関数と全関数

第9章「……もう一度、もう一度、もう一度、……」は、変な関数の話? まずは部分関数と全関数から (define looking (lambda (a lat) (keep-looking a (pick 1 lat) lat))) (define keep-looking (lambda (a sorn lat) (cond ((number? sorn) (keep-looking a (p…

Scheme手習い(13) 継続の続き

第8章「究極のlambda」の続きの続きの続き 数のリストから偶数だけを集めるevens-only*を作ります タップではなく木から集めてくるところがさっきまでとは違います これは普通の再帰だし問題ありません 次は収集子を使って、できあがりのリストと偶数の積と…

Scheme手習い(12) 継続

第8章「究極のlambda」の続きの続き Scheme手習いもそろそろ終盤 継続ってやつが出てきます 中ボスクラス Schemeはもともと継続を扱う機能を持っているんですが ここではlambdaを使って継続を手作りします たぶん原理的には同じもの では、これはどうでしょ…

Scheme手習い(11) 抽象化、部分適用

第8章「究極のlambda」の続き insertRとinsertLを高階関数に書き換えます (define insertL-f (lambda (test?) (lambda (new old l) (cond ((null? l) (quote ())) ((test? (car l) old) (cons new (cons old (cdr l)))) (else (cons (car l) ((insertL-f tes…

Scheme手習い(10) 高階関数とカリー化

第8章「究極のlambda」では高階関数を学びます まずは一番わかりやすい、引数として関数を渡すパターン いつものremberで、比較のための関数を指定できるようにします (define rember-f (lambda (test? a l) (cond ((null? l) (quote ())) ((test? (car l) a…

Scheme手習い(9) 集合と関数

第7章「友達と親類」では集合と関数を題材に取ります プログラミング的にはあまり新しい話はない気がするので何を書いたらいいものやら 作者の狙いは何 ここまでで覚えた書き方で数学の概念がこんな風に表現できますよ、みたいな感じ? 私はそういう話好きだ…

Scheme手習い (8) 表現と抽象化

基本的な再帰の練習は5章までで終わり 第6章「影法師」からは応用編といった感じ 6章では算術式を題材にして表現と抽象化を学びます 算術式をschemeで取り扱うためにS式で表したものを算術式の表現と呼びます まずは単純に、n + 3を(n + 3)と表現します とい…

Scheme手習い (7) 一般のリストの再帰(続き)

第5章「*すごい*星がいっぱいだ」の続きです 指定したアトムが木に現れる回数を数えるoccur*、指定したアトムを置き換えるsubst*、 指定したアトムの左にアトムを挿入するinsertL*を作ります 前回みっちり考えたのでここらへんは楽勝 数を作ったりリストを作…

Scheme手習い (6) 一般のリストの再帰

第5章「*すごい*星がいっぱいだ」では一般のリストに対する再帰を練習しますちょっと苦手なんです 一般のリストってなんでしょう? ラットやタップと異なり、リストの要素にリストを含むようなもののことを言ってます S式のリストと書いてるところもあります…

人類の生産性を向上させた偉大なテクノロジーに乾杯(大げさ

ちょっと話題になっていたので鎌倉シャツでシャツを買ってみました初めて洗濯したシャツを見てあっ、と気付きましたこれは、形態安定シャツじゃない 生地にこだわると形態安定じゃなくなるのでしょういつも買ってるシャツより高級感があっていい感じそこにつ…

脳とか瞑想とか集中とか直感とか

何かいろんなものが頭のなかでつながっている いつかまとまった文章にできるだろうか これくらい 脳 禅 瞑想 マインドフルネス 集中 自分を観察する 内向的 今ここ アドラー ゾーン スイッチが入る 無心 ひらめき・(女の)直感 大局観 答えはすでに出ている…

Scheme手習い (5) 数のリスト

次は数のリストを扱います 数のリストはタップ(tup)と呼ばれています 扱い方はラットとほとんど同じ タップに含まれる数の合計を返すaddtup (define addtup (lambda (tup) (cond ((null? tup) 0) (else (o+ (car tup) (addtup (cdr tup))))))) ()の代わりに0…

Scheme手習い (4) 計算

第4章「数あそび」では四則演算や比較などを定義しつつ数や数のリストの使い方を学びます この本で使うSchemeは非常に限定されていて、なんと足し算や引き算も比較もできません 数に関してできるのは1を足す(add1)、1を引く(sub1)、0かどうかを調べる(zero?)…

Scheme手習い (3) リスト作り

第3章「偉大なるCons」では再帰しながらconsを使ってリストを作ることを学びます リストから指定した要素を取り除く、rember という関数を題材にします 最初は間違った定義を与えられちゃったりします (define rember (lambda (a lat) (cond ((null? lat) (q…

マインドフルネスと「ていねい」

最近は「マインドフルネス」ってやつが気になっていますそれでこういうのを読みました 世界のトップエリートが実戦する集中力の鍛え方 ハーバード、Google、Facebookが取りくむマインドフルネス入門 作者: 荻野淳也,木蔵シャフェ君子,吉田典生 出版社/メーカ…

Scheme手習い (2) 初めての再帰

第2章「一度、もう一度、さらにもう一度、またもう一度、……」ではラットの再帰を学びます ラット(lat)はこの本だけの用語で、アトムだけが並んだリストのことです List of ATomsのことだと思われます 引数がラットであるかどうかを判定する関数lat?です (def…

Scheme手習い (1) 掟

Scheme手習いの復習を兼ねて、お勉強ログを焼き直しながら書いていきます 第1章「おもちゃ」ではアトム・リストの基礎を覚えます できることなら、読みながら例を試してほしい。 と書いてありますので実際に動かしながら進めましょう 以下のような問いを処理…