Questa è una vecchia versione del documento!
Introducing skeleton semantics with higher order functions
This is an summary of the lesson given on March 23rd.
We represent the functional semantics of skeletons with higher order functions. We use Ocaml for the examples.
Assuming that data streams are represented with Ocaml lists (just for the moment), a farm skeleton may be defined as follows:
let rec farm f x = match (x) with [] -> [] | listHead::listTail -> (f listHead)::(farm f listTail);;
Entering the farm definition in the Ocaml interpreter we get, as an answer, the type of the farm:
val farm : ('a -> 'b) -> 'a list -> 'b list = <fun>
that is a function taking a function from type 'a to type 'b and a list of values of type 'a and returning a list of items of type 'b When applying the farm to a function computing the square of integers, we get a function from integer streams to integer streams:
# let sq x = x * x;; val sq : int -> int = <fun> # farm sq;; - : int list -> int list = <fun> #
and applying this function to a list of integers, we get the list of squares:
# (farm sq) [1;2;3;4;5];; - : int list = [1; 4; 9; 16; 25] #