Googolからの引き算

30分プログラム、その796。anarchy golf - Substract from a Googolにインスパイアされて、Googolからの引き算をやってみます。
きっと、32bitの整数しか扱えない処理系でやるとエキサイティングなんでしょうけど、Gaucheだとあっさりできてしましました。ステキだと思います。

使い方

$ gosh googol.scm  0
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
$ gosh googol.scm  1
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
$ gosh googol.scm  123
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999877

ソースコード

#! /opt/local/bin/gosh
;; -*- mode:scheme; coding:utf-8 -*-

(define (pow n m)
  (cond
   ((eq? m 0) 1)
   ((even? m)
    (pow (* n n) (/ m 2)))
   (else
    (* n (pow n (- m 1))))))

(define googol (pow 10 100))

(define (main args)
  (for-each print
	    (map (cut - googol <>)
		 (map string->number (cdr args)))))