Closed4

プログラミング in OCamlメモ

esakaesaka

https://gihyo.jp/dp/ebook/2012/978-4-7741-5314-8

やろうと思ったきっかけ

年末年始だし関数型プログラミングの考え方学ぼうかと、前にこの書籍が考え方を学ぶのにはとても良いと聞いたので

M1 MacでOcamlのインストール

brewでいけるらしい

brew install ocaml
$ ocaml
        OCaml version 4.12.0

# 1 + 1;;
- : int = 2

いけた

esakaesaka

1章メモ

  • OCamlは関数型かつ強く型付けされた言語
  • 関数型プログラミングはプログラムから挙動を読み取ったり確かめたりするのが楽というのが大きい利点 -> このためには再帰の考え方が必須、この本では重点的に扱うよ
  • 静的型付け言語の中には弱い型付けと強い型付けがある。
    • 弱い型付けはコンパイル通っても型に関する安全性が担保されない、C言語はこれらしい
    • OCamlは強い静的型付け言語
  • 強い型付け言語は柔軟性が損なわれやすいけど、OCamlは多相的型システムなので、柔軟性高い(ジェネリクスとかかな?)
  • OCamlは型推論もあるよ
  • GCあり、オブジェクト指向プログラミング可能
esakaesaka

2章メモ

  • 行末に;;タイプして、Enter押すと評価される(REPLだけ?普通のファイルでも?)
  • OCamlではプログラムを構成する基本かつ中心要素がである
    • OCamlプログラムの実行は式を評価して値を求めること
    • OCamlでもはあるけど、式の特殊な場合という扱いらしい
  • OCamlの関数適用は()省略可能、以下どちらの呼び方も可能
abs 2;;
abs(3 - 5);;
  • 値の型が一意に決まる式はいい式(実行できる)、決まらない式は悪い式->typing error起きる
    • これはコンパイル時に静的検査される。型づけに成功したプログラムは型エラーを起こさない
  • #quitのように#で始まる入力はディレクティブ
    • 対話式コンパイラに対する入力となる
  • float型で四則演算する場合は演算子の後ろに.をつける -> 2. +. 4.021 ;; みたいに
  • char型はASCII文字のみで日本語は含めれない, string型は含めれる

練習問題

2.3.3がよく分からない

# int_of_float -0.7;;
Error: This expression has type float -> int
       but an expression was expected of type int
# -0.7;;
- : float = -0.7

-0.7がint解釈されてる?

2.4.3

// sqrt 3*3 +4*4
# sqrt(float_of_int((3*3) + (4*4)));;
- : float = 5.

OCaml結構型厳密でめんどいな、、例題だからわざとややこしくしてるとかであってほしい

  • 変数束縛はlet <変数名> = <式>;;
  • OCamlにおける変数束縛は値そのものに名前をつけることであり値の格納されるメモリ領域に名前をつけるものでない
    • 変数の再定義できるけど、メモリ領域の値を書き換えたわけでなく、新しい値を生成して束縛しただけらしい
    • その性質上、ある変数に別の型の値で束縛できたりする
このスクラップは2023/08/05にクローズされました