Multiplication tables: Difference between revisions

Content added Content deleted
(added ocaml)
Line 280: Line 280:
{{trans|C}}
{{trans|C}}


<lang ocaml>let format_of_string (s :string) = (Obj.magic s : ('a, 'b, 'c) format)
<lang ocaml>let () =

let () =
let max = 12 in
let max = 12 in
let fmax = float_of_int max in
let fmax = float_of_int max in


let dgts = int_of_float (0.99 +. log10(1.0 *. fmax *. fmax)) in
let dgts = int_of_float (ceil (log10 (fmax *. fmax))) in
let fmt = format_of_string(Printf.sprintf " %%%dd" dgts) in
let fmt = Printf.printf " %*d" dgts in
let fmt2 = format_of_string(Printf.sprintf "%%%ds%%c" dgts) in
let fmt2 = Printf.printf "%*s%c" dgts in


Printf.printf fmt2 "" 'x';
fmt2 "" 'x';
for i = 1 to max do Printf.printf fmt i done;
for i = 1 to max do fmt i done;
print_string "\n\n";
print_string "\n\n";


for j = 1 to max do
for j = 1 to max do
Printf.printf fmt j;
fmt j;
for i = 1 to pred j do Printf.printf fmt2 "" ' '; done;
for i = 1 to pred j do fmt2 "" ' '; done;
for i = j to max do Printf.printf fmt (i*j); done;
for i = j to max do fmt (i*j); done;
print_newline()
print_newline()
done;
done;
print_newline()</lang>
print_newline()</lang>

the function ''format_of_string'' can also be written like this:

<lang ocaml>external format_of_string : string -> ('a, 'b, 'c) format = "%identity"</lang>



=={{header|Perl}}==
=={{header|Perl}}==