(* Onomatopoeettinen alkoholiliike -- O'Caml-versio Idea Ionilta, joka varasti sen Rennexiltä. Tän version väsäsi psilon, Herrain vuonna 2002. Vade retro, satanas. *) let repeat n x = let result = ref "" in for i = 1 to n do result := !result ^ x done; !result ;; class virtual elucka init_nimi = object (self) val nimi = String.lowercase init_nimi method virtual sano: string method kuinkasanoo jotain = let isonimi = String.copy nimi in isonimi.[0] <- Char.uppercase isonimi.[0]; let jonot = [ "\n"; (repeat 2 (Printf.sprintf "%s sanoo %s, %s\n" isonimi self#sano self#sano)); (Printf.sprintf "Kuinka %s sanoo, kuinka %s sanoo,\n" nimi nimi); (Printf.sprintf "kuinka %s sanoo %s?\n" nimi jotain); (Printf.sprintf "%s sanoo %s, %s\n" isonimi self#sano self#sano)] in print_string (List.fold_right (^) jonot "") end;; (* eläinluokat *) class kana = object inherit elucka "kana" method sano = "kot kot kot" end;; class karhu = object inherit elucka "karhu" method sano = "mur mur mur" end;; class gorilla = object (self) inherit elucka "gorilla" method sano = "ÖRRÖR, TÄT EI PITÄNY KUTSUU" method kuinkasanoo jotain = print_string ("\nGorilla sanoo yääärrauhrhha\n" ^ "Gorilla sanoo yhhrräähh rhähhrrääh\n" ^ "Kuinka gorilla sanoo, kuinka gorilla sanoo,\n"); print_string (Printf.sprintf "kuinka gorilla sanoo %s?\n" jotain); print_string "Gorilla sanoo öährrh - bundolo!\n" end;; class kirahvi = object inherit elucka "kirahvi" method sano = "öri öri öri" end;; class kiiski = object inherit elucka "kiiski" as super method sano = "... ..." method kuinkasanoo jotain = super#kuinkasanoo jotain; print_string "... ..., ... ...\n" end;; class siittio = object inherit elucka "siittiö" as super method sano = "ptlqm" method kuinkasanoo jotain = super#kuinkasanoo jotain; print_string "ptlqm ptlqm, ptlqm ptlqm, ptl ptl, qm, ptlqm ptlqm...\n" end;; let laulu () = print_string "\nONOMATOPOEETTINEN ALKOHOLILIIKE\n\n"; let laula_yks (otus, x) = otus#kuinkasanoo x in List.iter laula_yks [(new kana, "Cabana"); (new karhu, "Karhu"); (new gorilla, "Carillo")]; print_string "\nKetulla on krapula, niin myös madolla.\n"; print_string "Kaikki ne voit tavata Alkon jonossa!\n"; (new kirahvi)#kuinkasanoo "Kahvi! Likööri!"; print_string "\nSiili käyttää aineita, niin myös etana.\n"; print_string "Heitä et voi tavata Alkon jonossa!\n"; List.iter laula_yks [(new kiiski, "Whisky"); (new siittio, "I love you")]; ;; laulu () ;;