Gauche — Practical Scheme Scripting

実用環境でのスクリプティングに照準を合わせた高速なR7RS Scheme実装です

ダウンロード 最新リリース: 0.9.15 ドキュメント

最新ニュース

2025/12/14

Gauche-gtk2 0.6.2

マイナーアップデート。APIをひとつ足したのと、新しめのGaucheへの適応。

過去のニュース ...

Why Gauche?

スクリプティング向けのデザイン

素早い立ち上がり、OSとのスムーズな統合、 表現力の高い構文により、シェルスクリプト的なツールや、 日々の業務の自動化に最適です。

バッテリー内蔵

ネットワーク、Unicode文字列と正規表現、 スレッド、各種アルゴリズムとデータ構造、 他、多くの機能がすぐに使えます。

現代のScheme、さらにその先

R7RS (smallとlarge) 互換であり、 また大半のfinalizeされたSRFIをサポートします。 さらに、統合された遅延シーケンスや、 メタオブジェクトプロトコルを備えたオブジェクトシステム等の言語拡張が採り入れられています。

安定性とアクティブな開発

20年以上に渡って現場で使われており、 安定性と互換性、そして長期にわたるメンテナンスを重視しています。

Gaucheをちょっと味見

;; フィボナッチ数列を生成するジェネレータ。 ^ は lambda の略記。
(define (make-fib-gen)
  (let ([a 1] [b 1])
    (^[] (let1 c (+ a b) (rotate! a b c)))))

;; フィボナッチ数の無限遅延リスト
(define *fibs* (generator->lseq (make-fib-gen)))

;; フィボナッチ数の最初の20項を取る
(take *fibs* 20)
;⇒ (1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765)

;; 100番目のフィボナッチ数は?
(~ *fibs* 100)
;⇒ 573147844013817084101

;; 2^64を超える最初のフィボナッチ数は何番目?
(use scheme.list)
(length (take-while (cut > (expt 2 64) <>) *fibs*))
;⇒ 93

;; フィボナッチ螺旋を描いてみよう
(use gauche.lazy)
(define (fib-spiral xsize ysize)
  ;; 1/4円弧の始点となる点列。複素数を使うことで回転は単なる掛け算になる
  (define *Pn*
    (lmap-accum (^[Fn rot acc]
                  (let1 next (+ acc (* rot (make-rectangular Fn Fn)))
                    (values acc next)))
                0 *fibs* (circular-list 1 -i -1 +i)))
  (define (draw-arc Fn Pn Pn+1)
    (format #t "<path d='M ~a ~a A ~a ~a 0 0 0 ~a ~a' fill='none' stroke='black'/>\n"
            (real-part Pn) (imag-part Pn) Fn Fn (real-part Pn+1) (imag-part Pn+1)))
  ;; SVGを生成
  (print #"<svg xmlns='http://www.w3.org/2000/svg' \
           viewBox='~(- xsize) ~(- ysize) ~(* xsize 2) ~(* ysize 2)'>")
  (for-each draw-arc
            *fibs*
            (take-while (^p (or (< (abs (real-part p)) xsize)
                                (< (abs (imag-part p)) ysize)))
                        *Pn*)
            (cdr *Pn*))
  (print "</svg>"))

;; 生成したSVGをファイルに保存
(with-output-to-file "fib-spiral.svg" (cut fib-spiral 600 480))

生成されたsvgファイル:

Programatically generated Fibonacci spiral

拡張

Schemeコミュニティの議論で制定される SRFI を含め、Gaucheのライブラリと拡張モジュールは続々と開発されています。

  • 200を超えるライブラリと拡張パッケージ
  • gauche-packageコマンドによるパッケージ管理
  • 自分で拡張パッケージを書くのも簡単

拡張パッケージ