/* Hello World! */
let
	/* definisco un array di String */
	type  arrtype = array of string

	function get_int():int = 
		let
			var buffer := " "
			var i := 0
     			function is_digit(s : string) : int = 
		  		ord(s)>=ord("0") & ord(s)<=ord("9")		
			function skip_white_spaces() =
				while buffer=" " | buffer="\n" do buffer := getchar()
		in 
			print("Insert an int nuber: ");	
			skip_white_spaces();
			while is_digit(buffer) do (
				i := i*10+ord(buffer)-ord("0");
				buffer := getchar()
			);

			/* return i */
			i
 		end
	
	/* quante volte voglio dire hello */
	var hellos:int := get_int()
	
	
	/* definisco una variabile array e di default in ogni  */
	var arr1:arrtype := arrtype [hellos] of "Hello World"

	/* definisco una funzione che mi stampa il numero in modo ordinato */
	function pretty_print_int(a:int) = (
		if a<10 then print(" ");
		if a<100 then print(" ");
		if a<1000 then print(" ");
		if a<10000 then print(" ");
		print_int(a);
		print("] ")
	)

	/* definisco una funzione che mi stampa hello */
	function print_hello(a:int, arr:arrtype) = (
		pretty_print_int(a+1);
		print(arr[a]);
		print("!\n")
	)
in
	/* inizio del programma */

	/* Ciao Mondo traduzione Italiana di Hello World */
	arr1[hellos-1] := "Ciao  Mondo";

	/* Stampa Hello per tutto le volte impostate */
	for i:=0 to hellos-1 do (
		print_hello(i, arr1)
	)
end