scheme

Exercise 2.11 (3)

ええと、gosh な REPL で問題の手続きを評価してみると同じ形で例外エラー。中身を見てみると以下な記述を発見。 (primapp-exp (prim rand1 rand2) (primapp-exp (subst rand1) (subst rand2)))))))これなのかな、ということで修正して再確認してみると Error…

Exercise 2.11 (2)

またまたちょっとだけ。昨日の朝の続き。 問題点としては以下な模様。 渡す lambda な S 式は expression な形になっている必要あり parse すれば良いのか primapp-exp を expression.scm に追加 fresh_id.scm も修正必要 lexical-address と expression が…

Exercise 2.11 (2)

またまたちょっとだけ。 設問の記述に沿って試験を書いてみます。

Exercise 2.11

ちょっとだけ。lambda-calculus-subst 手続きですが例えば var-exp の部分が以下になってて (var-exp (id) (if (eqv? id subst-id) subst-exp exp)subst-exp に単純に置きかえるのではなくて (if (occurs-free? id exp) subst-exp (fresh-id exp id))みたい…

Exercise 2.10

fresh-id という手続きについて云々。定義が以下らしい。 (define fresh-id (lambda (exp s) (let ((syms (all-ids exp))) (letrec ((loop (lambda (n) (let ((sym (string->symbol (string-append s (number->string n))))) (if (memv sym syms) (loop (+ n…

Exercise 2.9

(a b c) を parse すると以下。 gosh> (parse-expression '(a b c)) (app-exp (free-info a) (free-info b))あるいは (lambda) を parse すると以下。 gosh> (parse-expression '(lambda)) *** ERROR: pair required, but got ()どうすりゃ良いのかな。51p …

Exercise 2.8

いちおう試験にはパス。問題に compare this version to the original solution とあるので確認してみることに。

EoPL 読んでた記録の確認とその記録 (8)

Ex.2.8 です。ちょっとカン違いしてたのですが、以下は #t なんですね。 > (occurs-bound? 'x '(lambda (y) y))occurs-bound? は以下なカンジ。 (define occurs-bound? (lambda (var exp) (cases lexical-address exp (lit-exp (datum) #f) (lex-info (id de…

EoPL 読んでた記録の確認とその記録 (7)

Ex.1.19 の free-vars および bound-vars はヤッツケ。とりあえずできあがりは GitHub に反映しといて Ex.2.8 に着手。 とりあえず occurs-free および occurs-bound と expression を定義なのか。expression は既存を流用。て、Ex.2.7 の定義を使うことに今…

EoPL 読んでた記録の確認とその記録 (6)

今週は再び台風も接近しつつある中、色々と大変らしいのですが、昨晩同様気分転換に EoPL なナニでもごもごしようと思ってます。 とりあえず Ex.1.19 から着手。free-vars とか bound-vars を書け、とのこと。occurs-free? とか occurs-bound? の試験も書い…

EoPL 読んでた記録の確認とその記録 (5)

たまにはこちらに現実トウヒ、ってここも不具合が直らない、で終わってるorz とりあえず (test* "if expression more" '(if-exp (app-exp (free-info null?) (free-info l)) (free-info l) (lit-exp 1)) (parse-expression '(if (null? l) l 1)))な試験は ap…

EoPL 読んでた記録の確認とその記録 (4)

標題をいい加減何とかしないと、と思いつつ。 とりあえず、 abstract syntax の定義 parse-expression の定義 unparse-expression の定義 を作ってみます。

EoPL 読んでた記録の確認とその記録 (3)

留守番しつつ Exercise 1.31 リトライ。とりあえず以下をでっちあげてみた。 (define lexical-address (lambda (l) (let inner ((l l) (dict '())) (cond ((null? l) '()) ((symbol? l) l) ((eqv? (car l) 'lambda) (list (car l) (cadr l) (inner (caddr l)…

EoPL 読んでた記録の確認とその記録 (2)

若干標題が微妙な気がしますが当分これで続けてみます。 昨晩ですが、以前作成した lexical-address とその試験を手元に持ってきて動かしてみて、一応試験に成功するところまで確認しています。 つうかこれ abstract syntax 使え、ってありますね。で、これ…

EoPL 読んでた記録の確認とその記録

コードを引用してるんだけど、これって GitHub あたりにあったりするのかなぁ。 確認してみたところ 無い。自分エントリをさらってみたところ、2009 年あたりにもごもごしている模様。2.2 節以降を再確認しつつ EoPL も再確認しつつ進めてみることに。

fizzbuzz 現実トウヒ

末尾再起版。 #!/usr/bin/env gosh (define (fizzbuzz . args) (let-optionals* args ((limit 100) (fizz 3) (buzz 5)) (define inner-fizzbuzz (lambda (x result) (if (> x limit) result (inner-fizzbuzz (+ x 1) (cons (cond ((= (remainder x (* fizz b…

fizzbuzz 現実トウヒ

以下なナニが書けるあたり、やはり Gauche というか Scheme はアレ。 #!/usr/bin/env gosh (define (fizzbuzz . args) (let-optionals* args ((limit 100) (fizz 3) (buzz 5)) (define inner-fizzbuzz (lambda (x limit fizz buzz) (if (> x limit) '() (con…

CodingDOJO

Clean Coder でググッてたら CodingDOJO なるソレがあるらしいことを知る。プロのプログラマになるための必読書「Clean Coder」というエントリによれば ボブおじさんはコーディング道場(Coding Dojo)という名前でボウリングゲームのTDDを何回も、何年も実演…

TheSeasonedSchemer (6)

chapter 16 を読んだとの連絡が入ったので確認。 Scheme修行16章 前半分の memoize なソレはスルー。というか、後ろ半分の Y-bang も若干微妙ですが。

TheSeasonedSchemer (5)

chapter 15 を読んだとの連絡が入ったので確認。 Scheme修行15章 ここ、というか 17 番目の戒律はレキシカルクロージャって呼ばれるソレの話な気がしています。レキシカルクロージャって言うと意味不明なので手続きオブジェクトの属性、って言えば良いのかど…

TheSeasonedSchemer (4)

今更ながらどうもこの本はこーゆー形ではなくて、ホワイトボードがある所で喧喧諤諤しながら読んだ方が良さげな気がしてきています。 Scheme修行14章 この章、確かに長くはあるのですが、非常に示唆に富んでるというかなかなか面白いです。 第15の戒律 if が…

TheSeasonedSchemer (3)

13. 読んだとの連絡は結構前に入っていたのですが、ばたばたしてて対応が遅れた。 Scheme修行13章 継続は随分前に Gauche の実装見てムネをカキムシッていた記憶があるのだけれど、実際使ったことはあまり無かったりなんかします。 ので、 再帰の途中で '() …

letcc

フライングして書いてみようかな。以下。 (define-syntax letcc (syntax-rules () ((letcc hop body1 body2 ...) (call-with-current-continuation (lambda (hop) body1 body2 ...))))) (define member? (lambda (a lat) (cond ((null? lat) #f) ((eq? (car …

TheSeasonedSchemer (2)

早速 12. 読んだと連絡が入る。 Scheme修行12章 上記エントリ見つつとりあえず読んでみよ。

TheSeasonedSchemer

今日の xhago2 では LISP 系の発信がありましたのでとりあえず満足。ちなみに括弧は取り除くものではありません。 それは良いとして、github なリポジトリから clone を。 $ git clone https://github.com/hanachin/TheSeasonedSchemer.git

Scheme 修行

遂に着手した旨の報せが twitter 経由で着信。 Scheme修行の11章を読む前に なんとかついていきたいと思ってます。 そういえば Shibuya.lisp TT#7 が 10/22 (土) に開催という報せも twitter 経由で着信していた。当分 Ust も見てないので今回はチェックした…

Y combinator なエントリ

カブせる形で TB を頂きました。 Yコンビネータを理解したい わしはざっくりループだろ、と第六感な所見を述べるエントリを投入しただけだったのですが、きちんと λ 計算について確認をして、Y combinator についての自分なりの理解をきちんと理解できる言葉…

Y combinator

昨晩と今日の午前中、以下な定義をひたすらニラんでおりました。 ((lambda (le) ((lambda (mk-length) (mk-length mk-length)) (lambda (mk-length) (le (lambda (x) ((mk-length mk-length) x)))))) (lambda (length) (lambda (l) (cond ((null? l) 0) (els…

Scheme 手習い 10 章 (2)

そういえば、ということで git fetch してみた。 $ git fetch remote: Counting objects: 119, done. remote: Compressing objects: 100% (49/49), done. remote: Total 117 (delta 76), reused 108 (delta 67) Receiving objects: 100% (117/117), 11.02 Ki…

Scheme 手習い 10 章

出ました。metacircular evaluator です。 リストのペアである_エントリ (entry)_が出てきた後に lookup な手続きだったり extend な手続きだったりして、環境を云々することを前提にしているのが分かります。