open Tk let rec gcd n m = if n = 0 then m else if n >= m then gcd (n-m) m else gcd m n;; let compute entry_n entry_m label_r = fun() -> let n = int_of_string (Entry.get entry_n) in let m = int_of_string (Entry.get entry_m) in let result = gcd n m in Label.configure label_r ~text:(string_of_int result);; let root = openTk() in let top_frame = Frame.create root in let gcd_begin = Label.create top_frame ~text:"gcd(" in let n = Entry.create top_frame ~width:4 ~relief:`Sunken in let m = Entry.create top_frame ~width:4 ~relief:`Sunken in let gcd_end = Label.create top_frame ~text:")=" in let result = Label.create top_frame in let button = Button.create root ~text: "Compute" ~command: (compute n m result) in pack [top_frame] ~side:`Top ~expand:true ~fill:`Both ; pack [gcd_begin] ~side:`Left ~anchor:`E ; pack [n; m] ~side:`Left ~expand:true ~fill:`X ; pack [gcd_end; result] ~side:`Left ~anchor:`W ; pack [button] ~side:`Bottom ~expand:true ~fill:`X ; mainLoop();;