seasonedschemer
私の空気読みによると、なんかletやletrecは宿題ね、と言われているような気がする lambdaができてるからきっと簡単にできるはず えーとlambdaしてapplicationするということだから (define binds-of (lambda (x) (car (cdr x)))) (define letbody-of (lambd…
lambdaは手習いのvalueにもありましたが、set!が出てきた関係で 複数の式を書けるようにする必要があります (define *lambda (lambda (e table) (lambda (args) (beglis (body-of e) (multi-extend (formals-of e) (box-all args) table))))) クロージャの作…
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修行も最終章 あいかわらずよく意味の分からないタイトルで締めてくれます 第10章とおなじく、ここではschemeのインタプリタを作ります 今回はdefineが(letccも)実装されますのでそのままセルフで自分自身を実行することができるはず 今回もな…
前回のwaddleはもともと再帰がややこしいところにlet/ccが入ったので なんだかよくわからないことになってましたが leaveとfillだけの話ならこんな感じでぴょんぴょんさせることができます (define A (lambda () (let/cc here (set! leave here) (display "A…
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…
deepです (define deep (lambda (m) (cond ((zero? m) (quote pizza)) (else (cons (deep (sub1 m)) (quote ())))))) (deep 6)としてやると((((((pizza))))))ができますが ((((((pizza))))))ではなく((((((mozzarella))))))を作るにはどうしたら いいでしょ…
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のコア中のコアと思っていた…
ふたたび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…
前回の代入では代入前の値は捨てられていましたが、今回は引数をため込んでいきます こんな関数で (define ingredients (quote ())) (define sweet-toothR (lambda (food) (set! ingredients (cons food ingredients)) (cons food (cons (quote cake) (quote…
代入です set!はdefineされた変数に値を代入します と書くと先生に怒られるかもしれません 「名前xはaを参照しています」という言い方はここが初めてかな? こちらが正しい表現なんでしょう さっきまでaを参照していたxに、今度はbを参照させるというのがset…
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 ((…
やっとletがでてきます letをletrecよりletccより後でとりあげたのはどういうことなんでしょう? leftmost 一番左のアトムを探すleftmostです (define leftmost (lambda (l) (cond ((atom? (car l)) (car l)) (else (leftmost (car l)))))) これは引数に空リ…
第13章 ホップ、スキップ、ジャンプ 継続が出てきます intersectall 題材はintersectallです まずはintersectから (define intersect (lambda (set1 set2) (cond ((null? set1) (quote ())) ((member? (car set1) set2) (cons (car set1) (intersect (cdr se…
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手習いと似たようなことが書いてあるので さらっといきます 継続(continuation)と代入(set!)という新たな概念を使用してプログラミングの幅を広げている 継続はともかくとして、代入なんて、と思っ…