(apply-generic op . args)

教育者, 将軍, 栄養士, 心理学者, 親はプログラムする. 軍隊, 学生, 一部の社会はプログラムされる. - 計算機プログラムの構造と解釈 序文

勉強・CS

SQLパズル 第2版

SQLパフォーマンス詳解があまりにも面白かったので、次はSQLパズルをやっていました。 kouyatakao.hatenablog.com が、これウェブ(特にRails)の世界だとあんまりこう...ピンと来ないというか。 SQLパズルで紹介されているような技術を使うと、多分DHHの引い…

Go言語で作るインタプリタ

これは去年2023年の7月頃にやってた本。初めてのGo言語を読み終わって、次にGoの勉強のためにやり始めた記憶があります。 結論としてはSICPでやった部分とかなり重複しており、尚且つ「練習問題がない」という理由で1/3くらいまでやったものの途中で辞めまし…

SQLパフォーマンス 詳解

2024/07/27に読了. あまりにも面白くて、土曜日の7時から17時まで海にも行かずに夢中で全部読んでしまいました。 特にBツリー(Binary Tree じゃなくて Balanced Tree)の構造を知ることが出来たので、複合indexを貼る順番によってどのように検索木が作られ更…

初めてのGo言語

Golangの勉強をしようと思い、「初めてのGo言語」を読みました。 2023/05/01から読み始め、2023/06/12に読み終わりました。 やってない日もあるので、実際には34日間かかりました。 この本を選んだ理由 以下のレビューがとても刺さったので(特に実用〜とジェ…

SICP 読了

計算機プログラムの構造と解釈(以下SICP)を読み切りました。 2022年9月22日から2023年4月30日まで、157日間かかりました。 10年前は途中で挫折したけど、今ならやりきれると思って重い腰を上げた。無理せず1日1Pを目処にして、2~3年掛かっていいから継続して…

SICP 3.5 ストリーム

結構最後の方は問題飛ばしてしまった。 若干飽きてきてしまい... 2周目で深堀りしたいな。 gaucheでSICPのdelay gaucheで遅延評価しようとすると、実装の違いからSICPの意図とはズレていしまいます。 よってpackages/配下に以下のファイルを置いて対応しまし…

SICP 3.4 並列性: 時が本質的

github.com ; ex-3.38 ; Peter: (set! balance (+ balance 10)) ; Paul: (set! balance (- balance 20)) ; Mary: (set! balance (- balance (/ balance 2))) ; ; a. ; Peter->Paul->Mary, 110->90->45 ; Peter->Mary->Paul, 110->55->35 ; Paul->Peter->Mary…

SICP 3.3.5 制約の拡散

github.com 3.34~3.37はスキップします。 これはやらなくても別に困らないというか、もういいかなって。 (define (for-each-except exception procedure list) (define (loop items) (cond ((null? items) 'done) ((eq? (car items) exception) (loop (cdr i…

SICP 3.3.4 ディジタル回路のシミュレーター

う〜ん、今回もまた「最後に完成するまで動かせない」系の奴でちょっとテンション下がってしまった。 入力したいデータ、出力で欲しいデータはわかっている 大枠を作っていく 細かいところは後で作っていく これは良いんだけど、細かい部分が未実装だから動…

SICP 3.3.3 表の表現

github.com 3.3.2の最後のデキューの実装でちょっと燃え尽きた感があったのと、次の「デジタル回路のシミュレーター」が楽しみ過ぎて3.3.2はざっくりとだけ... (define (assoc key records) (cond ((null? records) false) ((equal? key (caar records)) (ca…

SICP 3.3.2 キューの表現

github.com ; 3.3.2 キューの表現 ; 3.3.scmはconsを自前実装しているのでファイルを分ける(dispatchを返して意図したように動かないので) (define (make-queue) (cons '() '())) (define (front-ptr queue) (car queue)) (define (rear-ptr queue) (cdr que…

SICP 3.3.1 可変リスト構造

github.com ; ex-3.12 (define (append x y) (if (null? x) y (cons (car x) (append (cdr x) y)))) (define (append! x y) (set-cdr! (last-pair x) y)) (define (last-pair x) (if (null? (cdr x)) x (last-pair (cdr x)))) ; ; (define x (list 'a 'b)) ;…

SICP 3.2 評価の環境モデル

見にくい...↓こちらで見れる github.com ; ex-3.9 ; ; 再帰版 ; _____________________________________ ; 大域領域 -> | | ; ------------------------------------- ; ↑ ↑ ↑ ; E1→|n:3| E2→|n:2| E3→|n:1| ; (if (= n 1) ; 1 ; (* n (factorial (- n 1))))…

SICP 3.1 代入と局所状態

; 3.1.1 局所状態変数 ; withdraw以外のどこからでもbalanceにアクセス出来る. ; withdrawからだけアクセス出来るようにしたい. (define balance 100) (define (withdraw amount) (if (>= balance amount) ; beginは順次評価していって最後の式を返す ; set!…

SICP 2.5 汎用演算のシステム

問題2.85で意図しない動作に。 修正しようにも1fileで雑に書き進めたので修正厳しいので2.85以降は飛ばすことに。 もうapply-genericええやろ...(疲労) 2週目、又は一旦全部終わったら2.4と2.5をやり直そうと思います。 1周目から完璧を求めると挫折するので…

SICP 2.4 抽象データの多重表現

get,putが出てきてから動かせなくてしんどくなり、apply-genericで混乱したので色々検索。 github.com ここで3.3.3のget,putの実装を載せてくれていたので動かしながら理解することが出来て助かりました。 ; 2.4.1 複素数の表現 (define (add-complex z1 z2)…

SICP 2.3.4 例: Huffman 符号化木

GET A JOB SHA NA NA NA NA NA NA NA NA GET A JOB SHA NA NA NA NA NA NA NA NA WAH YJP YJP YJP YJP YJP YJP YJP YJP YJP SHA BOOM '(1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 1 …

SICP 2.3.3 例: 集合の表現

やってます #| ; 要素xが集合setの構成要素か? (define (element-of-set? x set) (cond ((null? set) #f) ((equal? x (car set)) #t) (else (element-of-set? x (cdr set))))) ; setにxを追加する (define (adjoin-set x set) (if (element-of-set? x set) s…

SICP 2.2.4 例:図形言語

実際に描画出来ないのでパスした問題が何問か。 gauche-glとかを使えばいけそうな気がしたけど、使い方とか調べてまでこれを描画したいか?と言われるとそうでもなかったのでパスする方向で(テヘペロ SICP2周目とかでやるといいかもしれない。 ; wave ; 線画…

SICP 問題 2.42 エイトクイーンパズル

ex-2.42 エイトクイーンパズルが終わりました(2.43もエイトクイーンパズルだけど). 全く何も見ないで解くのは無理だなーと思ったので、答えを見て動かしながら手続きどの様に動作するのか?を理解するに留めました。 まぁこういうのは「知っているか、知らな…

何度目かのSICP再履修

何回目だろう?SICPやってます。 今回はなんと続いています(笑) ↓今日はここまで進みました。 19日目(p65->p68/p366(18.56%))`2.2.3 公認インターフェイスとしての並び`を読んでいます。問題2.33をやりました。次回は問題2.34からです。無理せず1日1P,1問を…

計算機プログラムの構造と解釈(SICP) 勉強メモ6

今日は気分があまり乗らないので、ここでSICPはSTOPして違うことしようかな。 問題1.7から1.1.8まで。 ;問題1.7 ;小さい数は ;(sqrt 0) => 0.03125 ;0の平方根は0だが、ここでは0.03125が返ってくる。 ; ;大きい数は ;(sqrt 9999999999999999999999999999999…

計算機プログラムの構造と解釈(SICP) 勉強メモ5

2週間ほど急がしくて勉強が出来なかった。 今日から再開。 とりあえず、前回勉強した分をUPしてなかったのでUP. 問題1.6だけ。 問題1.7で悩んでる。 ;問題1.6 (define (new-if predicate then-clause else-clause) (cond (predicate then-clause) (else else…

計算機プログラムの構造と解釈(SICP) 勉強メモ4

"関数型言語の関数は数学の関数と同じだ!!!" くらいのことを言われ(書かれ)ていたので、数学の関数とプログラミングの手続きの間の重要な違い、というのには目から鱗だった。 ;;1.1.7 Newton法による平方根 ;これまでに紹介した手続きは、通常の数学の…

計算機プログラムの構造と解釈(SICP) 勉強メモ3

今日はなんか朝4時に目が覚めてしまったので、SICPのお勉強。 問題1.1~1.5までやりました。 ;問題1.1 ;式の列がある。それぞれの式で解釈系が印字する結果は何か。列は示した順に評価する物とする。 ;$gosh で確認。oは正解。xは不正解。 ;10 =>10 o ; ;(+ 5…

計算機プログラムの構造と解釈(SICP) 勉強メモ2

今日は2P進んだ。 condはカッコッカが多くなるから”大失敗”らしい。 ;;1.1.6 条件式と述語 ;Lispには場合を分け(case analysis)を記述するための特殊形式がある。それをcond(conditional(条件付き)意味する)といい、次のように使う。 ; ;(define (abs x) ; …

計算機プログラムの構造と解釈(SICP) 勉強メモ

普段からしている勉強内容をブログに貼り付けてみようと思った。 3日分。 9Pまで。 ;\r => now file load REPL ;;;1.手続きによる抽象の構築 ; 計算プロセス(computational process)とは計算機の中に住む抽象的な存在である。 ;データとは(data)もう一つの抽…