scheme

タグ

Reading Gauche のタグについてな項のモディファイ中。いっちゃん最後の_Heap object_では以下な記述をしてます。 末端 3 bit が 111 ペアと flonums 以外の heap-allocated なオブジェクトの最初のワードにのみ、との記述あり 末端 3 bit をマスクして ScmC…

Gauche-0.9 なタグの実装

確認したら 0.8.11 な実装とは異なる模様。gauche.h のコメント見つつ以下にまとめ。

0.9 な reading gauche

とりあえず着手してみた。最初の一発目から微妙ッス。 てか、このあたりって 0.9 も 0.8 も無いように思ってるんですが、いいのかなぁ。 最初のハードルはマクロのひらかも。

今日

読書会の日だったのですが JAG なコミュニティ運営委員会ってコトでリモート実施に。しかも今回の運営委員会はリモート参加不可なのをすっかり忘れてて (ry 相方な sw@mac の中のヒトも大学に教科書があるとの事にて今日は問題 2.3 についての検証のみ、で終…

shiro さんからフォロー頂いた

曰く VMEvalとかVMApplyの戻り値はevalやapplyの結果ではないことに注意してください。 これらの手続きはVMのスタックに引数を積み、*次にVMが制御が戻った時点で* 「VAL0に格納された手続きを、スタックに積まれた値を引数として呼び出す」という コードが…

repl.c あたり

面白いんですが整理が大変。とりあえず確認したのは Scm_ApplyRec 手続きからなんですが、ここでは引数で渡されたリストの要素を取り出しながら vm->vals 配列に格納して apply_rec 手続きを呼び出してます。 apply_rec 手続きの定義が以下。 static ScmObj …

Scm_Repl 手続き

定義は以下。repl.c の L192。 void Scm_Repl(ScmObj reader, ScmObj evaluator, ScmObj printer, ScmObj prompter) { Scm_ApplyRec(SCM_OBJ(&repl_STUB), SCM_LIST4(reader, evaluator, printer, prompter)); }なんか今までの見方が微妙だなぁ、と思いつつ…

ざっくり見すぎ

なんとなくこうなっていくんだな、というあたりは見えかけてたんですが、なんとなく腑にオチないな、と言いつつ repl_read_cc 手続き (repl.c の L102) 見てて微妙な違和感。 Scm_VMPushCC(repl_eval_cc, data, 4); return Scm_VMEval(result, SCM_FALSE);よ…

問題 2.1

解の例を発見。以下。 (define (make-rat n d) (let ((g ((if (< d 0) - +) (gcd n d)))) (cons (/ n g) (/ d g))))

Scm_VMRepl 掘削メモ

現実トウヒがてら、ざくっと掘削したメモとか帰宅後に掘削したメモとか。

わはは

問題 2.1 の以前の回答を確認してみたら大ウソ。これは無いなぁ。

読書会

今年最初の、でした。

gauche-0.9

昨晩掘削したあたりは 0.8 系と変わりは無いのかな。

0.9 というか

それ以前な部分を見ている状態だったり。

0.9 な Reading が開始されている模様

とりあえず main.c の 516 行の } else { Scm_Repl(SCM_FALSE, SCM_FALSE, SCM_FALSE, SCM_FALSE); }から確認開始。knishii さんが掘ってるナニも確認しつつ。

昨晩

knishii2156 さんと話をした結果、gauche 0.9 を読む方向でナニ。基本的には Gaucheのソースコードを読む に沿って色々やってみましょう、という話になったはず(を そして今日も怒濤の一日。

1.3.1 引数としての手続き

問題 1.31 以降の試験を検討。ええと sum は高階手続きとして書ける、とあるな。例示されてる手続きが以下です。 (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b))))p.31 の記述によれば 手続きを扱う手続きを高階手続き…

EoPL reading (144) 3.2 The Front End

試験を書きかけて判明。emptylist を定義してない。 (use gauche.test) (add-load-path ".") (load "parse-program") (load "Fig3.2") (load "run") (test-start "Ex.3.7") (test-section "example") (test* "(run '(list 1 2 3))" '(1 2 3) (run '(list 1 2…

EoPL reading (143) 3.2 The Front End

色々バタバタしてたので久々なカンジ。 Exercise 3.7 cons とか car とか cdr とか list の追加。

数え上げたものを整形するナニ

accumulate とか filter とかも込みな手続きのセットが以下です。 (define (getChangePattern n) (accumulate cons '() (filter (lambda (x) (= (apply + x) n)) (enum-candidate n (make-list n candidate-list))))) (define (accumulate op init seq) (if …

数え上げ (2)

できた。と思う。 (define candidate-list '(50 25 10 5 1)) (define (make-list n l) (cond ((null? l) '()) ((>= n (car l)) l) (else (make-list n (cdr l))))) (define (enum-candidate n candidate) (define (ec-inner rslt lst candidate) (if (null? …

数え上げ

要件としては ある数の両替パターンを全部数え上げたい まず、要素の合計がある数以下なリストの集合を取得したい という事になります。釣り銭のパターンとしては (define candidate-list '(50 25 10 5 1))で、例えば 16 が_ある数_としたら make-list とい…

EoPL reading (142) 3.2 The Front End

アタマが違う方面に行ってるのですが、明日向けのリハビリ、という事で無理矢理手を動かしてみます。 Exercise 3.6 ええと、scan&parse ではなく parse-program 使います。例示されているナニ的には以下なカンジでしょうか。 gosh> (run '(minus (+ (minus 5…

EoPL reading (141) 3.2 The Front End

EoPL の練習問題をがっつりヤるか、GAE 方面にニゲるか、入門 Git に走るか悩ましいと言いつつ gdgd 続行。# 今 1300 Excersize 3.5 当分 primitive の追加な問題が続く。おそらくは parse-expression 手続き apply-primitive 手続き に分岐を追加をしてあげ…

EoPL reading (140) 3.2 The Front End

早朝練習。 Exercise 3.4 REPL を使うのは手動で以下。

EoPL reading (139) 3.2 The Front End

ええと、parse な試験は全部書けてはないはずなので検討。

EoPL reading (138) 3.2 The Front End

直前エントリはダウトで終わったんですが、帰宅後に以下をでっち上げた。 (define parse-program (lambda (datum) (list 'a-program (parse-expression datum)))) (define parse-expression (lambda (datum) (cond ((number? datum) (list 'lit-exp datum)) …

EoPL reading (137) 3.2 The Front End

とりあえず練習問題に手を付けてみます。 Exercise 3.3 eva-program 手続きがマトモに動けば良いはず。sllgen が不要なのでこちらを先に、な easy さをご容赦頂ければ幸いです。

EoPL reading (136) 3.2 The Front End

昨晩の不具合は eopl:error-stop の定義が微妙な事が原因。呼び出されてるのは sllgen:error 内。 (define sllgen:error (lambda (who format . data) ;; print the message (eopl:printf "Error reported by sllgen during ~s:~%" who) (apply eopl:printf …

EoPL reading (135) 3.2 The Front End

とりあえず、scanner-spec-3-1 と grammar-3-1 を作ってみる。