История изменений
Исправление unikoid, (текущая версия) :
Ну смотри, как я понимаю, тебе для множества целых чисел.
Тогда написать это можно как-то так:
(define (swap n)
(if (< (abs n) 10) n
(+ (* (remainder n 10) (expt 10 (floor (log10 (abs n)))))
(swap (quotient n 10)))))
Соответственно, эту функцию можно описать как:
f(n) = n; |n| < 10,
f(n) = (n%10)*(10^floor(log10(|n|))) + f(n/10)
при условии, что у нас % - остаток от целочисленного деления, floor - отбрасывает дробную часть, log10 - десятичный логарифм и / - целочисленное деление.
Возможно, можно и для вещественных обобщить, лень думать сейчас.
Исходная версия unikoid, :
Ну смотри, как я понимаю, тебе для множества целых чисел.
Тогда написать это можно как-то так:
(define (swap n)
(if (< (abs n) 10) n
(+ (* (remainder n 10) (expt 10 (floor (log10 (abs n)))))
(swap (quotient n 10)))))
Соответственно, эту функцию можно описать как:
f(n) = n; |n| < 10,
f(n) = (n%10)*(10^floor(log10(|n|))) + f(n/10)
при условии, что у нас % - остаток от целочисленного деления, floor - округление, log10 - десятичный логарифм и / - целочисленное деление.
Возможно, можно и для вещественных обобщить, лень думать сейчас.