順列を求める(個数だけ)

個数だけ求めるなら、これで十分ですかね。

  (define (iter-2 ans num rests)
    (if (null? rests)
	(if (check ans)
	    1
	    0)
	(if (not (check ans))
	    0
            (apply + (map (lambda (x) (iter-2 (append ans `(,x)) x (remove x rests))) rests)))))

  (define (iter num count)
    (if (> num n)
	count
	(iter (+ num 1) (+ count (iter-2 (cons num nil) num (remove num numbers))))))

apply の箇所の map は辞めたほうが良いかもですが、
いい加減深夜(4時過ぎ)で頭が回らないのでwwwwっw、
また今度直します。

gosh> (time (tonari 9 3))
;(time (tonari 9 3))
; real   0.000
; user   0.000
; sys    0.000
2
gosh> (time (tonari 10 3))
;(time (tonari 10 3))
; real   0.016
; user   0.016
; sys    0.000
40
gosh> (time (tonari 11 3))
;(time (tonari 11 3))
; real   0.125
; user   0.156
; sys    0.000
792
gosh> (time (tonari 12 3))
;(time (tonari 12 3))
; real   1.343
; user   1.404
; sys    0.063
15374
gosh> (time (tonari 13 3))
;(time (tonari 13 3))
; real  17.816
; user  18.767
; sys    1.419
281434
gosh> (time (tonari 14 3))
;(time (tonari 14 3))
; real 266.113
; user 278.820
; sys   14.961
5089060

n = 14 の解は求まりますが、かなり時間がかかります。
解の個数が約 20 倍になるのと、処理時間が約 10 倍になるのは予想通りです。
n = 15 は計算が終わるまで約1時間ぐらいかかりそうですw