Como escrever uma função para números genéricos?
Eu sou bastante novo em F # e acho que a inferência de tipo é realmente uma coisa legal. Mas atualmente parece que isso também pode levar à duplicação de código, o que énão é uma coisa legal. Quero somar os dígitos de um número como este:
let rec crossfoot n =
if n = 0 then 0
else n % 10 + crossfoot (n / 10)
crossfoot 123
Isso imprime corretamente6
. Mas agora meu número de entrada não cabe int 32 bits, então eu tenho que transformá-lo em.
let rec crossfoot n =
if n = 0L then 0L
else n % 10L + crossfoot (n / 10L)
crossfoot 123L
Então umaBigInteger
vem no meu caminho e adivinhem ...
Claro, eu só poderia ter obigint
versão e converter parâmetros de entrada para cima e parâmetros de saída para baixo conforme necessário. Mas primeiro eu assumo o usoBigInteger
sobreint
tem algumas penalidades de desempenho. Segundolet cf = int (crossfoot (bigint 123))
simplesmente não lê bem.
Não existe uma maneira genérica de escrever isso?