落書きノート

ふと自分が気になった事を書いてます

OCaml

OCamlで不定期練習

open Printf;; let a = Array.make 5 0;; for i = 0 to 4 do a.(i) <- 5 - i; done;; let rec int_array i xs = match xs with [] -> () | x :: xs -> printf "a[%d] = %d\n" i x; int_array (i + 1) xs;; int_array 0 (Array.to_list a);; open Printf;; pr…

OCamlで不定期練習

Random.self_init ();; print_string "要素数 : ";; let n = read_int ();; let array = Array.make n 0;; for i = 0 to n - 1 do array.(i) <- Random.int 10 + 1; done;; let rec show index = if index = 0 then () else ( for i = 0 to n - 1 do if arra…

OCamlで不定期練習

配列、リストなどなどで、やっと本格的になってきたような…。こんな感じです。 open Printf;; let first = [0.0; 0.0; 0.0; 0.0; 1.0];; let rec show xs i = match xs with [] -> () | x :: xs -> printf "first[%d] = %f\n" i x; show xs (i + 1);; show f…

OCamlで不定期練習

open Printf;; print_string "整数を加算します。\n";; let sum = ref 0 let gn = ref 0 let rec group i = if i = 5 then () else ( print_string "整数 : "; gn := read_int(); if !gn = 99999 || !gn = 88888 then () else ( sum := !sum + !gn; group (i…

OCamlで問題を解く

OCamlも並行してやってます。せめて配列、リストを使うところまでは進めておきたいなと。 open Printf;; print_string "整数を加算します。\n";; print_string "何個加算しますか : ";; let n = read_int() let total = ref 0 let cnt = ref 0 let rec main …

OCamlで問題を解く

追記 間違っていたので修正。文章も追加しました。 自由自在に組めるようになってきました。それにしても面白い言語ですね。 if文が連続して記述出来ないなぁと思ったのですが、セミコロン1つ書けば、連続して書けますね。あまりそういう必要もないような気…

OCamlで問題を解く(訂正分)

一つ前の記事に載せたプログラム、間違ってましたので直しました。 print_string "2以上の整数値 : ";; let n = read_int() let cnt = ref 0;; let answer () = if !cnt = 1 then print_string "それは素数です。\n" else print_string "それは素数ではあり…

OCamlで問題を解く

forループ、使いづらいなぁと思ってましたけど、慣れたら使えるようになってきました。添字が0からだと使いづらいですが、1からにすれば無問題ですね。forループでリストを参照するときとかは少し工夫しないといけないかもしれませんけど。foreachのような命…

OCamlで問題を解く

再帰処理にこだわってやってましたけど、一部の問題ではどうやってもできないと思うので、邪道と呼ばれているforループを使いました。 print_string "正方形を表示します。\n";; print_string "段数は : ";; let n = read_int();; let rec loop nb = if nb <…

OCamlで問題を解く

switch文の代わりに、パターンマッチング使ってみました。使い方がわかると気持ちがいい。 open Printf;; print_string "季節を求めます。\n";; let rec main m = match m with 3 | 4 | 5 -> "春です。\n" | 6 | 7 | 8 -> "夏です。\n" | 9 | 10 | 11 -> "秋…

OCamlで問題を解く

open Printf;; print_string "整数値 : ";; let num = read_int();; let rec search n = if num = n then printf "%d\n" n else if num mod n = 0 then begin printf "%d " n; search (n + 1) end else search (n + 1);; search 1;; open Printf;; print_str…

OCamlで問題を解く

この言語で普通のプログラムを作ろうと思うと、慣れてないせいだと思うんですけど、簡単な問題でも時間かかりますね。まあ、こんな感じです。だいぶ間違いや無駄がなくなって来ました。 open Printf;; print_string "1からnまでの和を求めます。\n";; let an…

OCamlで問題を解く

大分慣れてきました。もう少し数をこなしてみて大丈夫そうだったら、HaskellかRustでも…。Scalaでも良いですね! 今までprint_string関数とかで異なる型の変数を繋げて無理やり使ってました。Printf.printf関数をもう少し意識して使うようにしなくては…。こ…

プログラミングで問題を解く

少しずつ解いてます。もう少しこなす言語を絞ったほうが良さそうですね…。苦笑。それはそうと、OCamlでクラスの問題に差し掛かったらどうすれば良いのでしょうか。また考えないと。 import java.util.Scanner; class q6_20 { public static void main(String…

プログラミングで問題を解く

Rubyで解いた問題、苦戦しました…。添字を利用しないと難しいです。なので、while文で無理やりやってます。以前はもっとすんなりと解けてたのになぁ…。あれ、おかしいな。 import java.util.Scanner; class q6_19 { public static void main(String[] args) …

OCamlで問題を解く

OCaml、ループ処理になってから難しいですね。なかなか詰まってしまいます。今のところ何とか出来てます。もう少し数を解かないと…。 open Printf;; Random.self_init();; print_string "数あてゲームを開始!!\n";; print_string "10~99の数を当ててください…

OCamlで問題を解く

JavaとRubyと並行しながらぼちぼちやってます。やっと再帰処理を使いました。while文の方が使いやすいと思っていたのですが、色々プログラムを作っていくうちに再帰処理でないと作るのが難しいと思ったからです。while文だと、ポインタ参照の機能が厄介です…

問題を解く

print "x : " x = gets.chomp.to_f puts "x = #{x}" b1 = true b2 = false puts "b1 = #{b1}" puts "b2 = #{b2}" # coding: utf-8 print "xの値 : " x = gets.chomp.to_i print "yの値 : " y = gets.chomp.to_i print "zの値 : " z = gets.chomp.to_i puts s…

問題を解く

OCaml,まだ再帰処理等の繰り返し文を使わずにやってみました。もう少し柔軟に出来るのかなと思ったら意外と融通ききませんね…。let式、if式、リストまで。変数の入れ替えが大変困難でしたので、リストを使ってソートしてみました。ソートのプログラムも自作…

OCamlで問題を解く

print_string "整数値 : ";; let n = read_int() in if n mod 10 == 0 then print_string "その値は10の倍数です。\n" else print_string "その値は10の倍数ではありません。\n";; print_string "整数値 : ";; let n = read_int() in if n mod 3 == 0 then p…

問題を解く プログラミング

print_string "整数値 : ";; let n = read_int() in if n < 0 then print_endline "値は負です。";; print_string "整数値 : ";; let n = read_int() in print_int(abs n);; print_newline();; print_string "変数A : ";; let a = read_int();; print_string…

OCamlで問題を解く

print_endline "三角形の面積を求めます。";; print_string "底辺 : ";; let bottom = read_float();; print_string "高さ : ";; let height = read_float();; print_endline("面積は" ^ string_of_float(bottom *. height /. 2.) ^ "です。");; let pi = 4.…

OCamlで問題を解く

print_string "整数値 : ";; let n = read_int();; print_endline("10を加えた値は" ^ string_of_int(n + 10) ^ "です。");; print_endline("10を減じた値は" ^ string_of_int(n - 10) ^ "です。");; print_string "整数値 : ";; let n = read_int();; print…

OCamlで問題を解く

let x = 63.4 let y = 18.3;; print_string("xの値は" ^ string_of_float(x) ^ "です。\n");; print_string("yの値は" ^ string_of_float(y) ^ "です。\n");; print_string("合計は" ^ string_of_float(x +. y) ^ "です。\n");; print_string("平均は" ^ str…

OCamlで問題を解く

関数型プログラミング言語でここまで詳細にしたことがなかったので正直これでいいかどうか基準がわかりませんがこんな感じで…。型に厳密で少し不便でしたね。再帰処理はまだ使ってないのでまた詳しい感想は言えませんが…。 print_string "初めてのJavaプログ…

OCamlの学習

えーと、何回目ですかね。分かりませんが、今日はこんな感じです。試すプログラムが少なかったのですが、今回の項目は難しいですね。練習問題が難しくなりそうです。 OCaml version 4.03.0 # let rec fact n = if n = 1 then 1 else fact(n-1) * n;; val fac…

OCamlの練習

練習問題、問題の意味がわからなくて少し苦戦しましたが、ネットで調べて解決しました。インタプリタで日本語を扱うのも少々複雑なので、調べてやってみました。 OCaml version 4.02.3 # (1.0, 2.0);; - : float * float = (1., 2.) # let author = ("Atsush…

OCaml 今日の成果

OCaml面白いです。この分だとHaskellも楽しみですね。 参考書を見ながら実行結果を確認し、問題を解いてみました。大雑把に成果を載せてみます。 # let pi = 3.1415926535 let area_of_circle r = r *. r *. pi;; val pi : float = 3.1415926535 val area_of…

OCaml 練習

Rustは後回しにしてOCamlで基礎を少し…。 OCaml version 4.03.0 # let pi = 3.1415926535;; val pi : float = 3.1415926535 # pi;; - : float = 3.1415926535 # 2.0 *. 2.0 *. pi;; - : float = 12.566370614 # let area_circle2 = 2.0 *. 2.0 *. pi;; val a…

プログラミング in OCaml

文字型とlet束縛の文法確認。そして練習問題をやりました。セミコロン忘れる…。 OCaml version 4.03.0 # 'a';; - : char = 'a' # '\120';; - : char = 'x' # int_of_char '\'';; - : int = 39 # char_of_int 55;; - : char = '7' # char_of_int 800;; Except…

プログラミング in OCaml

OCaml version 4.03.0 # 0b1011;; - : int = 11 # -0x1A3F;; - : int = -6719 # 0o274;; - : int = 188 # 0b1234;; Error: Invalid literal 0b1234 # max_int;; - : int = 4611686018427387903 # min_int;; - : int = -4611686018427387904 # 107 mod 7;; - …

プログラミング in OCaml 関数型プログラミングの基礎からGUI構築するまで

現在、読み進めております。 OCaml version 4.03.0 # abs(3-5);; - : int = 2 # 1 + 2 * 3;; - : int = 7 # (1 + 2) * 3;; - : int = 9 # 6 / 4 + 2;; - : int = 3 # 5 - 8 - 7;; - : int = -10 # 56 / 4 / 5;; - : int = 2 # - (5 + 1);; - : int = -6 # 5 …

OCaml 自作関数の使い方その2

モジュール機能を使ったり、複数の関数をまとめたり。 module Hello = struct let message = "Hello" let hello()=print_endline message end let goodbye()=print_endline "Goodbye" let hello_goodbye() = Hello.hello(); goodbye();; module Hello : sig …

OCaml 自作関数の使い方

初学者なので当たり前のことから書いていきます。 # let message = "Hello" let hello() = print_endline message;; - : val message : string = "Hello" - : val hello : unit -> unit = <fun> これを以下のように記述すると使えます。 # hello();; Hello - : un</fun>…