回答 - fib(1000)

Challenge for Geeks - JGeek Log

gosh> (fib2 1)
1
gosh> (fib2 2)
1
gosh> (fib2 3)
2
gosh> (fib2 1000)
43466557686937456435688527675040625802564660517371
78040248172908953655541794905189040387984007925516
92959225930803226347752096896232398733224711616429
96440906533187938298969649928516003704476137795166
849228875

コメントして頂いた行列演算で計算しています.
gaucheの行列演算ライブラリは無いんだろうか? ベクトルはある. それくらい自分で書けって話か.

コメントありがとうございます.

practicalscheme 『簡単なものならgauche.arrayモジュール中に少しあります。
速度や機能が必要なら、何らかの外部ライブラリを呼び出した方が良いと思われます。
こちらにgslを呼び出す例があります。Cライブラリ関数を呼び出しているのであんまり
Schemeらしくありませんが: http://ja.doukaku.org/comment/2334/』(2007/12/03 20:35)

2*2行列をn乗したいだけなので速度は必要ないっす. ということでGauche ユーザリファレンス: 9.1 gauche.array - 配列を使ったので大分とコードがすっきりしました.

(use gauche.array)
(define (FIB2 n)
  (array-ref (array-expt (array (shape 0 2 0 2) '1 '1 '1 '0) (- n 1)) 0 0))
(FIB2 1000)

板倉さん(id:ita)の指摘により思い出した\left(\begin{array}{cc}1&1\\1&0\\ \end{array}\right)^{n-1}の(0,0)要素がFib(n)になることを利用したもの.

前原さんのところでも話あり.
See http://d.hatena.ne.jp/maehara/20071203