(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

10進数な逆数を求める

暇だったので、朝からカキカキ。

逆数を10進数で表現する。

(define (reciprocal m)
  (let loop ((a '()) (b '()) (n 1))
    (if (find (^x (= (mod n m) x)) b)
	(reverse (cons (div n m) a))
	(loop (cons (div n m) a)
	      (cons (mod n m) b)
	      (* (mod n m) 10)))))

適当過ぎて、あれ。
このままだと結果がただのリストになって返ってくるので、変換。

(string->number
 (string-join `("0"
		,(list->string
		  (map (^x (integer->char (+ 48 x)))
		       (cdr (reciprocal 7)))))
	      "."))
;;0.142857

(exact->inexact (/ 7))
;;0.14285714285714285

かなり、無理やり←

一応、循環少数なら繰り返しする範囲までを取得して返すみたいな感じにできてるはず?