[ create a new paste ] login | about

Link: http://codepad.org/oGJ4Mwzh    [ raw code | output | fork ]

OCaml, pasted on Jan 17:
let rec fact1 n =
  match n with
    0 -> 1
  | n -> n * fact2 (n - 1)
and fact2 n = 
  if n < 2 then 1 
           else n * fact3 (n - 1)
and fact3 = function
  | 0 -> 1 
  | n -> n * fact1 (n - 1) ;; 

(* チューリングの賢人鳥 *)
let rec turing's_sage f x = f (turing's_sage f) x ;;

(* カリーの雲雀 *)
let lark x (`M y) = x (fun z -> y (`M y) z) ;;
let curry's_sage f x = lark f (`M (lark f)) x ;;

print_int (fact1 5) ;;
print_string "\n" ;;
print_int (fact2 5) ;;
print_string "\n" ;;
print_int (fact3 5) ;;
print_string "\n" ;;
print_int (turing's_sage (fun f x -> if x = 0 then 1 else x * (f (x-1))) 5) ;;
print_string "\n" ;;
print_int (curry's_sage (fun f n -> if n = 0 then 1 else n * (f (n-1))) 5) ;; 


Output:
1
2
3
4
5
120
120
120
120
120


Create a new paste based on this one


Comments: