let version ="0.1"let filenames = ref []let width = ref 80let spec =[("--width",
Arg.Int(fun n -> width := n),
"Set line width");("--version",
Arg.Unit(fun()->Printf.printf "fold in OCaml ver.%s\n" version),
"Display version")]letrec fold_line n str =let len =String.length str inif len > n then( print_endline (String.sub str 0 n);
fold_line n (String.sub str n (len - n)))else
print_endline str
letrec each_line ic =
fold_line !width (input_line ic);
each_line ic
let fold_file filename =let infile = open_in filename intry
each_line infile
withEnd_of_file-> close_in infile
let()=Arg.parse spec
(fun s -> filenames := s ::!filenames)"Usage: fold [--width width] [--help] [--version] filename ...";List.iter fold_file (List.rev !filenames)
^o^ >ocamlc -o fold.exe fold.ml
^o^ >fold --width 40 fold.ml
let version = "0.1"
let filenames = ref []
let width = ref 80
let spec = [("--width",
Arg.Int (fun n -> width :=
n),
"Set line width");
("--version",
Arg.Unit (fun () -> Printf
.printf "fold in OCaml ver.%s\n" version
),
"Display version")]
let rec fold_line n str =
let len = String.length str in
if len > n then
( print_endline (String.sub str 0 n)
;
(以下略)
let version ="0.1"let display_linenum = ref falselet filenames = ref []let spec =[("-n",
Arg.Set display_linenum,
"Display line number.");("-version",
Arg.Unit(fun()->Printf.printf "cat in OCaml ver.%s\n" version),
"Display version.")](* print each lines *)letrec output_file ic =
print_endline (input_line ic);
output_file ic
(* print each lines with line number *)letrec output_file_n n ic =Printf.printf "%5d %s\n" n (input_line ic);
output_file_n (n+1) ic
let cat_file filename =let infile = open_in filename intryif!display_linenum then
output_file_n 1 infile
else
output_file infile;withEnd_of_file-> close_in infile
let()=Arg.parse spec
(fun s -> filenames := s ::!filenames)"Usage: cat [-n] [-help] [-version] filename ...";List.iter cat_file (List.rev !filenames)
^o^ >ocamlc -o cat.exe cat.ml
^o^ >cat -n cat.ml
1 let version = "0.1"
2
3 let display_linenum = ref false
4
5 let filenames = ref []
6
7 let spec = [("-n",
8 Arg.Set display_linenum,
9 "Display line number.");
10 ("-version",
11 Arg.Unit (fun () -> Printf.printf "cat in OCaml ver.%s\n" ve
sion),
12 "Display version.")]
13
(以下略)
module Main (main) where
euler031 :: [Int] -> Int -> Int
euler031 (x:[]) m | m `mod` x == 0 = 1
| otherwise = 0
euler031 (x:xs) m = sum $ map (\n -> euler031 xs (m - x*n)) [0..(m `div` x)]
main :: IO ()
main = putStrLn $ show $ euler031 [200,100,50,20,10,5,2,1] 200
module Main (main) where
collatz :: Int -> [Int]
collatz 1 = 1 : []
collatz n | n `mod` 2 == 0 = n : collatz (n `div` 2)
| otherwise = n : collatz (n * 3 + 1)
euler014 :: Int -> [Int]
euler014 n = snd $ foldl g (0, []) $ map f [1..n]
where
f x = ((length.collatz) x, x)
g (x,zs) (l,z) | x < l = (l, z:[])
| x == l = (x, z:zs)
| otherwise = (x, zs)
main :: IO ()
main = mapM_ (putStrLn.show) $ euler014 1000000