プログラムに計算式とかせるのが好き2

;;素因数分解する。
(define (prime-decomposition x)
;;素因数分解するとき。
;;nで割ってみて、余りが0だったら、戻り値にnを追加して、もう一回
;;余りが0じゃなかったらnを+1して、ループ
;;…であってる?
;;nが素数じゃなかったら、とかは下の方からループしてくと発生しない?
  (define (prime-decomposition-iter x n)
	(cond ((= n x)(list x))
		  ((= (remainder x n) 0)
		   (cons n (prime-decomposition-iter (/ x n) n)))
		  (else
		   (prime-decomposition-iter x (+ n 1)))))
  (prime-decomposition-iter x 2))
  

なんと原始的な書き方をすると素数判定いらない。結構意外だった。