Как мне преобразовать целое число в список и наоборот в Оз?

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

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


person el diablo    schedule 26.09.2009    source источник


Ответы (2)


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

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

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
person sepp2k    schedule 26.09.2009
comment
Очень умно. На самом деле я понял, как математически перевернуть цифры числа, используя mod и div, и поэтому больше не нужно преобразовывать числа в список, чтобы их перевернуть. Спасибо. - person el diablo; 27.09.2009

Это должно сделать трюк более лаконичным:

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

Ваше здоровье

person JFT    schedule 01.01.2010