scheme
Reading Gauche のタグについてな項のモディファイ中。いっちゃん最後の_Heap object_では以下な記述をしてます。 末端 3 bit が 111 ペアと flonums 以外の heap-allocated なオブジェクトの最初のワードにのみ、との記述あり 末端 3 bit をマスクして ScmC…
確認したら 0.8.11 な実装とは異なる模様。gauche.h のコメント見つつ以下にまとめ。
とりあえず着手してみた。最初の一発目から微妙ッス。 てか、このあたりって 0.9 も 0.8 も無いように思ってるんですが、いいのかなぁ。 最初のハードルはマクロのひらかも。
読書会の日だったのですが JAG なコミュニティ運営委員会ってコトでリモート実施に。しかも今回の運営委員会はリモート参加不可なのをすっかり忘れてて (ry 相方な sw@mac の中のヒトも大学に教科書があるとの事にて今日は問題 2.3 についての検証のみ、で終…
曰く VMEvalとかVMApplyの戻り値はevalやapplyの結果ではないことに注意してください。 これらの手続きはVMのスタックに引数を積み、*次にVMが制御が戻った時点で* 「VAL0に格納された手続きを、スタックに積まれた値を引数として呼び出す」という コードが…
面白いんですが整理が大変。とりあえず確認したのは Scm_ApplyRec 手続きからなんですが、ここでは引数で渡されたリストの要素を取り出しながら vm->vals 配列に格納して apply_rec 手続きを呼び出してます。 apply_rec 手続きの定義が以下。 static ScmObj …
定義は以下。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);よ…
解の例を発見。以下。 (define (make-rat n d) (let ((g ((if (< d 0) - +) (gcd n d)))) (cons (/ n g) (/ d g))))
現実トウヒがてら、ざくっと掘削したメモとか帰宅後に掘削したメモとか。
問題 2.1 の以前の回答を確認してみたら大ウソ。これは無いなぁ。
今年最初の、でした。
昨晩掘削したあたりは 0.8 系と変わりは無いのかな。
それ以前な部分を見ている状態だったり。
とりあえず main.c の 516 行の } else { Scm_Repl(SCM_FALSE, SCM_FALSE, SCM_FALSE, SCM_FALSE); }から確認開始。knishii さんが掘ってるナニも確認しつつ。
knishii2156 さんと話をした結果、gauche 0.9 を読む方向でナニ。基本的には Gaucheのソースコードを読む に沿って色々やってみましょう、という話になったはず(を そして今日も怒濤の一日。
問題 1.31 以降の試験を検討。ええと sum は高階手続きとして書ける、とあるな。例示されてる手続きが以下です。 (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b))))p.31 の記述によれば 手続きを扱う手続きを高階手続き…
試験を書きかけて判明。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…
色々バタバタしてたので久々なカンジ。 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 …
できた。と思う。 (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 とい…
アタマが違う方面に行ってるのですが、明日向けのリハビリ、という事で無理矢理手を動かしてみます。 Exercise 3.6 ええと、scan&parse ではなく parse-program 使います。例示されているナニ的には以下なカンジでしょうか。 gosh> (run '(minus (+ (minus 5…
EoPL の練習問題をがっつりヤるか、GAE 方面にニゲるか、入門 Git に走るか悩ましいと言いつつ gdgd 続行。# 今 1300 Excersize 3.5 当分 primitive の追加な問題が続く。おそらくは parse-expression 手続き apply-primitive 手続き に分岐を追加をしてあげ…
早朝練習。 Exercise 3.4 REPL を使うのは手動で以下。
ええと、parse な試験は全部書けてはないはずなので検討。
直前エントリはダウトで終わったんですが、帰宅後に以下をでっち上げた。 (define parse-program (lambda (datum) (list 'a-program (parse-expression datum)))) (define parse-expression (lambda (datum) (cond ((number? datum) (list 'lit-exp datum)) …
とりあえず練習問題に手を付けてみます。 Exercise 3.3 eva-program 手続きがマトモに動けば良いはず。sllgen が不要なのでこちらを先に、な easy さをご容赦頂ければ幸いです。
昨晩の不具合は 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 …
とりあえず、scanner-spec-3-1 と grammar-3-1 を作ってみる。