(* Various examples *) let curry f a b = f ;; (* 2-arg currying *) let gcd m n = ;; let rec fibo = repeat f:(\m,n /m+n,m) 2:0 3:1; K ;; (* short! *) let rec fibo' n = (repeat n f:(\*m,*n /m:m+n,n:m) m:0 n:1).m ;; let sigma = I o it_list f:(T2 add) 2:0;; (* the standard quick_sort *) let partition test:f = it_list f:(\x; if (f x) then:(\l1:l /l1:x::l) else:(\l2:l /l2:x::l)) l1:[] l2:[] ;; let rec quick_sort *order = \[]; [] | [h|t]; partition test:(order 2:h) t \*l1,*l2; quick_sort order:order l1 @ h::quick_sort order:order l2 ;; (* a "random" number generator *) let random n seed:x = let x = mod (x+6373) 23557 in ;; let rand_list = repeat f:(T2 cons o random 1000) 2:[] ;; (* lists *) let rev = it_list f:(T2 cons) 2:[] ; I;; (* on madonna: sorting 50 ints 100 ints fiml v0.2 2.23+8.73 5.31+22.16 fiml v0.3 1.45+9.34 error 50 seed:6583 100 1000 v0.2 2.72+11.11 5.80+23.98 v0.3 1.91+26.74 error v0.3 ht 2.70+12.64 5.33+27.40 v0.3 light 2.28s 4.65s 229s *) (* on myriem seed:6583 100 v0.4 3.9s v0.3l 4.4s *)