node gen_x_v1() returns (x:real) = loop 0.0<x and x<42.0

node gen_x_v2() returns (x:real) = 
  loop { 0.0<x and x<42.0 fby loop [20] x = pre x }

node gen_x_v3() returns (target:real; x:real=0.0) =
  run target := gen_x_v2() in
  loop { x = (pre x + target) / 2.0 }

let inertia=0.6

node gen_x_v4()  returns (target:real; x:real=0.0) =
  run target := gen_x_v2() in
  exist px,ppx : real = 0.0 in
  loop { 
      px = pre x and ppx = pre px and
      x = (px+target) / 2.0+inertia*(px-ppx) 
  }
