37 lines
937 B
Plaintext
37 lines
937 B
Plaintext
(* Test a function which takes another function as an argument *)
|
|
|
|
let foobar (i : int) : int =
|
|
let foo: (int -> int) = fun (i : int) -> i in
|
|
let bar: ((int -> int) -> int) = fun (f : int -> int) -> f i
|
|
in bar foo
|
|
|
|
(* higher order function with more than one argument *)
|
|
|
|
let higher2 (i : int) (f : int -> int): int =
|
|
let ii: int = f i in ii
|
|
|
|
let foobar2 (i : int) : int =
|
|
let foo2 : (int -> int) = fun (i : int) -> i
|
|
in higher2 i foo2
|
|
|
|
let a : int = 0
|
|
|
|
let foobar3 (i : int) : int =
|
|
let foo2 : (int -> int) = fun (i : int) -> a + i
|
|
in higher2 i foo2
|
|
|
|
let f (i : int) : int = i
|
|
|
|
let g (i : int) : int = f i
|
|
|
|
let foobar4 (i : int) : int = g (g i)
|
|
|
|
let higher3 (i : int) (f : int -> int) (g : int -> int) : int =
|
|
let ii : int = f (g i) in ii
|
|
|
|
let foobar5 (i : int) : int =
|
|
let a : int = 0 in
|
|
let foo : (int -> int) = fun (i : int) -> a + i in
|
|
let goo : (int -> int) = fun (i : int) -> foo i
|
|
in higher3 i foo goo
|