kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

J-Bobを作ってみよう(8) 簡易プロファイラ

関数の呼び出し回数が見えるようにしてみようかと
envに覚えるようにしておいて、japplyかなにかのタイミングで更新すればよさそう
リストのままだと更新しづらい(気がする)から、structにしてみようか
こういうの「純粋」なやりかたではどうやるのかな

まず動きはそのまま内部表現だけ変えます

続きを読む

J-Bobを作ってみよう(7)

テストを移植しながら調べているとここが無限ループとは言わないまでも
やたらと時間がかかっていることを発見しました
なおインデントは自分で直しています(以下同文

>> (defs? (tdefs)
     '((defun double (x) (add x x))
       (defun len (xs) (if (atom xs) '0 (+ '1 (len (cdr xs)))))
       (dethm len>=0 (xs) (< '0 (+ (len xs) '1)))))

tdefsというのはこれ
J-Bobでは普通の意味での変数がないので、引数なしの関数として定義しています
preludeなどと同じ

(defun tdefs ()
  '((defun add (x y) (+ x y))
    (dethm eq (x) (equal (equal x x) 't))
    (defun li (x) (if (atom x) '() (cons (car x) (li (cdr x)))))
    (dethm xy (x y) (if (equal x 'a) (equal y '1) 't))))

引数が短ければすぐ帰ってきます

続きを読む

J-Bobを作ってみよう(5) テスト

どうやって調べようか
テストを移植するかな
これまで書いたテストを再利用するためにはまずmy/testが書けなきゃいけなくて
そのためには最低限displaybeginがほしい

続きを読む

J-Bobを作ってみよう(4) load

えーとあとは
ファイルから読めるようにしたらいいのか

どうするのがスマート?
J-Bobにloadつけるのかな
それともJ-Bobの外に作るのがいいだろうか
いったん外で使うのを作って、その後J-Bobに入れよう
文字列型もないけど
きっとreadならなんとかしてくれる

続きを読む

J-Bobを作ってみよう(3) 関数定義、関数適用、REPL

さていよいよ関数定義と関数適用です
よく覚えていないのでとりあえず雑に書いてみます
J-Bobではクロージャとか考えなくてもよさそうな気がしている

まずは関数定義
J-Bobのdefunは式一つ書ければいいんだよな・・・?

続きを読む

J-Bobを作ってみよう(2) 組み込み関数

組み込み関数も作ればもうちょっとそれっぽい式で遊べるはず
関数が大きくなっていきますがしばらくは何も考えずにcondの下に生やしていって
大きくなりすぎたなと感じてから考えます
でも(car e)くらいはなんとかしたほうがいいな

  (let ((op (car e)))
    (cond ((eq? op 'quote) (cadr e))

ではまずconscarcdrから

続きを読む