import math,strutils

proc fixedWidth(input: string, minFieldSize: int):string {.inline.} =

# Note that field size is a minimum- will expand field if input
# string is larger
if input.startsWith("-"):
  return(input & repeatchar(count=(abs(minFieldSize-len(input))),c=' '))
else:
  return(" " & input & repeatchar(count=(abs(minFieldSize-len(input))-1),c=' '))

template mathOnInterval(lowbound,highbound:float,counts: int,p:proc) =

block:
  var step:    float = (highbound - lowbound)/(max(counts,1))
  var current: float = lowbound
  while current < highbound:
    echo($fixedWidth($current,25) & ": " & $fixedWidth($p(current),25))
    current += step

echo “Sine of theta from 0 to 2*PI by PI/12” mathOnInterval(0.0,2.0*PI,12,sin) echo(“n”) echo “Cosine of theta from 0 to 2*PI by PI/12” mathOnInterval(0.0,2.0*PI,12,cos)

# The first example above is much the same as: # for i in 1..100: # echo($sin( (float(i)/100.0) * 2.0*PI ))