関数とか演算子とか (F#)
(* anonymous function いわゆるラムダ式 *) printfn "1 + 2 = %d" ((fun x y -> x + y) 1 2)
(* function キーワードによるラムダ式 - function は引数を1つしか持てない - 引数を2つ以上使いたいときは次のようにつなげる - 普通は function ではなくて fun を使えば OK *) printfn "1 + 2 = %d" ((function x -> function y -> x + y) 1 2) // 丁寧にカッコを付けるとこうなる printfn "1 + 2 = %d" ((function x -> (function y -> x + y)) 1 2)
(* カリー化 *) let plus x y = x + y // 2引数の関数を定義 let increment = plus 1 // カリー化により1引数の関数を生成 printfn "(increment 3) = %d" (increment 3) // (plus 1 3) と同じ結果
(* 演算子 S = { !$%&*+-./<=>?@^|~ } とすると S(S|':')* という記号列を 自由に演算子として定義できる。 だから次のような顔文字みたいな演算子も定義可能。面白い。 *) let (@^-^@) he her = he + " loves " + her // 演算子 @^-^@ を定義 printfn "%s" ("Jack" @^-^@ "Nancy") // "Jack loves Nancy" と出力