17.4.28 繰り返しのまとめ

ここまでのまとめです.

「0からnまでの和」や「n秒後の割合」のように一般にnに関する計算が

let rec f(n) = 
if n=0 
  then 《nが0の場合の式》
  else 《f(n-1)を使った式》

のように定義することができます.

繰り返しのところで出てきた関数の定義をまとめると, 次のようになります.

(* 0からnまでの整数の和 *)
let rec sum(n) =  
  if n=0 then 0  
  else (sum(n-1))+n

(* k+1からnまでの和にsを足した数 *)
let rec sum_from(k,s,n) =
  if k=n then s
  else sum_from(k+1,s+k+1,n)

(* 0からnまでの整数の和(別解) *)
let sum_alt(n) = sum_from(0,0,n)

(* テクネチウム99mが1秒間に崩壊する割合 *)
let disintegration_per_sec = 0.0000320362394891

(* テクネチウム99mのx秒後の割合 *)
let rec tc99m x = 
  if x=0 then 1.0 
  else (1.0-.disintegration_per_sec)*.(tc99m (x-1))

(* 最初の割合がxだったテクネチウム99mのn秒後の割合 *)
let rec tc99m_from(x,n) = 
  if n=0 then x 
  else tc99m_from(x *. (1.0 -. disintegration_per_sec), n-1)

(* テクネチウム99mのn秒後の割合(別解) *)
let tc99m_alt(n) = tc99m_from(1.0,n)

(* テクネチウム99mの半減期 *)
let rec half_life(n,r) = 
  if r < 0.5 then n 
  else half_life(n+1,r *. (1.0 -. disintegration_per_sec))
fileiteration.ml