2010-02-01から1ヶ月間の記事一覧

Gauche で Brainf*ck を作ってみた。

「Rubyで作る奇妙なプログラミング言語」を参考に Gauche で Brainf*ck を作ってみました。 使い方は、(この方法だと','による入力が無視される) $ echo "+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.------…

Gauche で経路探索A*(エースター)

経路探索アルゴリズムA*(エースター)を参考にGauche で書いてみました。 (use srfi-1) ;; List library (use srfi-43) ;; ベクタライブラリ (use gauche.interactive) (use slib) (require 'trace) (define maze-string (string-append "*******************…

eq? eqv? equal? の使い分け

同値かどうかの判定に q? eqv? equal? のうちどれを使えば良いか分からなかったのでGauche ユーザリファレンス 6.1 等価を参考にテストしてみた。 (define (list-for-each pred dat ls) (call/cc (lambda (return) (for-each (lambda (x) (if (pred x dat) (…

Gauche のハッシュテーブル Ruby のハッシュテーブル

Gauche のハッシュテーブルは Key の 比較を eq?, eqv?, equal?, string=? から選択して指定します。 gosh> (hash-table 'eq? '(a . 1) '(b . 2)) #<hash-table eq? 0x89ff578> gosh> (hash-table-get (hash-table 'eq? '(a . 1) '(b . 2)) 'a) 1 gosh> (hash-table-get (hash-table 'e</hash-table>…

「プログラミングGauche」読書メモ(1)

6.2 リストの基本操作 gosh> '(1 . (2 . (3 . (4 . (5 . ()))))) (1 2 3 4 5) (1 . (2 . (3 . (4 . (5 . ()))))) と (1 2 3 4 5) は同等で、通常はドットをなるべく使わない表記をしている。 で、初心忘るべからずというか、この逆の関数を作ってみた。 (def…

Gaucheでヒープ

練習に「常に子よりも親が大きい(小さい)値の二分木をヒープという」を Gauche で書いてみた。 (use gauche.collection) (use gauche.uvector) (use srfi-43) ;;vector-swap! ;; 親の位置 (define (parent n) (quotient (- n 1) 2)) (define (vct-swap v x…