import ../memo/memo
proc factorize_memo(n : int) : seq[tuple(prime:int, exp:int)] {.memoized.} =
if n < 0: n = -n
return @[[5,3]]
proc factorize*(n : int) : seq[tuple(prime:int, exp:int)] =
return factorize_memo(n)
when isMainModule:
echo factorize(40)
See the return types above. Nim doesn't like it.
Making a user type out of the tuple seems to have fixed i:
import ../memo/memo
type
prime_pwr = tuple
prime: int
power: int
proc factorize_memo(N: int) : seq[prime_pwr] {.memoized.} =
var n = N; if n < 0: n = -n
if n in [0,1]: return @[(n, 1)]
return @[(n, 3)]
proc factorize*(n : int) : seq[prime_pwr] =
return factorize_memo(n)
when isMainModule:
echo factorize(1)
You need brackets after tuple, not parentheses, e.g. seq[tuple[prime: int, power: int]].
You can also use anonymous tuples, for example, seq[(int, int)], but then you can access individual fields only by destructuring, numeric indices, or Field0, Field1, etc.