2009-09-26 4 views
0

Как преобразовать целое число в список и обратно в Oz? Мне нужно взять номер 321 и перевернуть его на 123.Как преобразовать целое число в список и наоборот в Oz?

Реверсивная функция в Oz работает только в списках, поэтому я хочу преобразовать 321 в [3 2 1], отменить его и преобразовать [1 2 3] назад в 123. Может ли это быть сделано в Oz?

ответ

1

Отказ от ответственности: Я действительно не знал Оз до 5 минут назад и только читал примеры в Википедии, поэтому следующие ошибки могут быть пронизаны ошибками. Однако он должен дать вам представление о том, как подойти к проблеме. (Выполнение функции tail-recursive остается в качестве упражнения для читателя).

Обновление: Следующая версия протестирована и работает.

local 
    % turns 123 into [3,2,1] 
    fun {Listify N} 
    if N == 0 then nil 
    else (N mod 10) | {Listify (N div 10)} 
    end 
    end 

    % turns [1,2,3] into 321 
    fun {Unlistify L} 
    case 
     L of nil then 0 
     [] H|T then H + 10 * {Unlistify T} 
    end 
    end 
in 
    % Turns 123 into 321 
    {Browse {Unlistify {Reverse {Listify 123}}}} 
end 
+0

Очень умный. Я на самом деле понял, как математически изменить цифры числа, используя mod и div, и поэтому больше не нужно преобразовывать числа в список, чтобы перевернуть их. Благодарю. –

1

Это должно сделать трюк более succintly:

{Show {StringToInt {Reverse {IntToString 123}}}} 

Приветствия