Scheme

継続

今年の4年生も勉強会(SICP 読書会?)をやるらしい。素晴らしいことです。長く続けばいいんだけど。 で、講師をする schemer の id:athos がちょっとすごいので、彼の日記にあった限定継続版ジェネレータを普通の継続で書き直してみた。最初は楽勝だろーと思っ…

マクロ

図書館に行く用事があったので、ついでにいくつか本を借りてきた。Scheme 入門とかプログラミング Ruby とか。読みこむつもりは全然ないんだけど、これくらい知っとかないと馬鹿にされるかなとか思って。そんでまず Scheme 入門を飛ばし飛ばし読む。マクロと…

独習 Scheme 3週間

独習 Scheme 3週間という資料を印刷してあるのを見つけ、ぱらぱらと見てみる。前半はまぁいいとして、後半からは、 マクロ オブジェクト指向プログラミング 継続(コルーチンとか) 非決定計算 エンジン みたいな話がでてきて結構濃い。もうちょっと前にこれを…

クロージャできたっぽい

prim2 は prime の定義の中に入れてしまいたいが、現状では(インタプリタは)内側の define で定義した関数が再帰してると自分を見つけられない。 (define (from n) (cons n (lambda () (from (+ n 1))))) (define (take n l) (if (zero? n) '() (cons (car l…

やっぱり Gauche はすごい

OCaml のソースを吐けるようになったので、実行速度を比べてみることに。使ったのは次のソース。 (define (fib x) (if (= x 0) 0 (if (= x 1) 1 (+ (fib (- x 1)) (fib (- x 2)))))) (define main (print (fib 25))) 結果。 % ./minscheme compile f.scm % g…

コンパイル

一応コンパイルができるようになった。Scheme -> Haskell と変換して、そのまんま ghc にコンパイルさせてます。 (define main (print (fact 10))) (define (fact x) (if (= x 0) 1 (* x (fact (- x 1))))) % ./minscheme compile fact.scm [1 of 1] Compili…

Scheme というか Lisp インタプリタ

作ってた。前に作ったやつは入出力ができないという悲しい作りだったんだけど、今回のやつはちゃんと入出力ができますよ。ちょっと前にもめてた数値は、とりあえず整数型だけに限定することで対応してます。そのうちなんとかしなきゃね。それと、lambda は動…

自然数

前にやった、自然数を生成するやつ。少しまともになった。id:Gemmaさんの助言による。 (define (make-natural) (let ((c '())) (lambda () (call/cc (lambda (yield) (let loop ((n 0)) (if (null? c) (call/cc (lambda (cont) (begin (set! c cont) (yield …

無限リスト

Scheme の call/cc を理解するために。Python の yield を真似してみる。こんなん。 def natural(): n=0 while 1: yield n n += 1 >>> a=natural() >>> a.next() 0 >>> a.next() 1 >>> a.next() 2 で、Scheme 版。 pos とか restart とかいうよくわからない…

Lisp処理系

適当なLisp処理系(と言えるのか?)を作りました。半日で作った感じなので、細かいミスは仕方ない! import System.IO import Control.Monad import Text.ParserCombinators.Parsec data LispVal = Atom String | Boolean Bool | String String | Number Inte…