さかもとのブログ

つらつらと

scheme

OnLisp第11章condletの定義で知ったCommon LispとScheme(Gauche)のletの違い

タイトル長いけれど,言いたいのは, common lispでは [81]> (let (a b c) (list a b c)) (NIL NIL NIL) Gaucheでは gosh> (let (a b c) (list a b c)) *** ERROR: Compile Error: syntax-error: malformed let: (let (a b c) (list a b c)) "(stdin)":181:(…

foldを使う

簡単にまとめると、明示的な再帰を用いるプログラミングスタイルはよろしくないと言うこと。Haskellwikiにもそう書かれている。良い関数型プログラマは再帰を用いず再帰をパターン化した高階関数を使うのだそうだ。 maoeのブログ ということで,OnLispを少し…

同じ文字をまとめる

http://www.shido.info/gb/guestbook.php?id=1413 common lispでの実装を通して,schemeとの違いが書かれている. このページに (pack '(a a a a b c c a a d e e e e)) ((A A A A) (B) (C C) (A A) (D) (E E E E))と結果が返ってくるような関数packが載って…

gaucheでのエラー

現在SICPの4.3に取り組んでいる. この4.3ではamb評価器を実装して,問題を解くのだが,さっきまでどうしてもうまく動かなかった. 動かなかったプログラムは以下のもの. (define (require p) (if (not p) (amb))) (define (hoge n) (let ((a (amb 1 2 3 4)…

mapの実装

演習問題4.14が,mapに関する問題だった.問題の内容は Aさん,Bさんはそれぞれ超循環評価器の実験をしていた.Aさんは,mapの定義を入力し,それを使うテストプログラムをいくつか走らせたところ,うまく動いた.ところで,Bさんは,システムの組み込みのma…

random関数

Gaucheユーザリファレンスより (use math.mt-random) (define m (make <mersenne-twister> :seed (sys-time))) (mt-random-integer m 1000) (define (rand) (mt-random-integer m 1000)) こうしておくと, gosh> (rand) 164 gosh> (rand) 69(rand)で乱数が生成される.</mersenne-twister>

SICP演習問題2.33~2.39

;;;exercise2.33 (define (my-map p sequence) (accumulate (lambda (x y) (cons (p x) y)) '() sequence)) (define (my-append seq1 seq2) (accumulate cons seq2 seq1)) (define (my-length sequence) (accumulate (lambda (x y) (+ 1 y)) 0 sequence)) ;;…

SICP演習問題2.27~2.32

;;2.27 (define (deep-reverse lis) (if (pair? lis) (append (deep-reverse (cdr lis)) (list (deep-reverse (car lis)))) lis)) higeponさんがとってきた解答例では (define (deep-reverse tree) (if (not (pair? tree)) tree (reverse (map deep-reverse …

closureは便利

SICPのP.52より (define (my-cons x y) (lambda (m) (m x y))) (define (my-car z) (z (lambda (p q) p))) (define (my-cdr z) (z (lambda (p q) q)))

CentOS5.3にgauche-glをインストール

とりあえずgauche-glを取ってきて, freeglutを入れて,./configureをしたら, checking GL/glx.h usability... yes checking GL/glx.h presence... yes checking for GL/glx.h... yes checking GLUT/glut.h usability... no checking GLUT/glut.h presence... …

SICP演習問題1.37

;;再帰的プロセス (define (cont-frac n d k) (if (= k 0) 1 (/ (n k) (+ (d k) (cont-frac n d (- k 1)))))) (trace cont-frac) (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 10) ;;反復的プロセス (define (cont-frac n d k) (let loop ((result (/ (n k…