OCaml
https://scrapbox.io/files/616203d4cdecfa0023945343.png
非純粋なので副作用起こし放題
変数定義はlet
code:ml
let x = 50;; (* このダブルセミコロンなんだよ *)
let x = 20;; (* シャドーイングがある *)
let a = 10 in
let b = 20 in
a * b;; (* let in でスコープを切れる *)
関数定義もlet
code:ml
let square x = x * x;;
関数定義にはかっこ不要
code:ml
let ordered a b c = a <= b && b <= c;;
code:ml
let average a b = (a +. b) /. 2
再帰的関数にrecが必要
code:ml
let fact n = if n = 0 then 1 else fact (n - 1) * n
int: 64bitシステムでは63bit整数
float: IEEE 754 64bit浮動小数点数
bool: true か false
char: 8bit文字
Unicodeさん?
string: 8bitの連続
list char ではないらしい
code:ml
let rec fact n = match n with 0 -> 1 | _ -> fact' (n - 1) * n