Как написать функцию для общих чисел?

Я новичок в F # и обнаружил, что вывод типа действительно крутая вещь. Но в настоящее время кажется, что это также может привести к дублированию кода, что не круто . Я хочу суммировать цифры такого числа:

let rec crossfoot n =
  if n = 0 then 0
  else n % 10 + crossfoot (n / 10)

crossfoot 123

Это правильно печатает 6 . Но теперь мой входной номер не умещается в 32 бита int, поэтому мне нужно преобразовать его в.

let rec crossfoot n =
  if n = 0L then 0L
  else n % 10L + crossfoot (n / 10L)

crossfoot 123L

Затем, BigInteger приходит мне на помощь и угадаю, что…

Конечно, я мог иметь только версию bigint и приводить входные параметры вверх и выходные параметры вниз по мере необходимости. Но сначала я предполагаю, что использование BigInteger вместо int имеет некоторые потери производительности. Второй let cf = int (crossfoot (bigint 123)) просто плохо читается.

Нет ли универсального способа написать это?

37
задан primfaktor 19 January 2011 в 07:17
поделиться