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
かなり、無理やり←
一応、循環少数なら繰り返しする範囲までを取得して返すみたいな感じにできてるはず?