Following code snippet shows how to compute bound (i.e the min and max elements) of a List using F#.

let rec bound (lst:int list) : (int*int) option = | |

match lst with | |

| [] -> None // Empty List | |

| xhd::xtl -> | |

match bound xtl with | |

| None -> Some (xhd,xhd) // List with only 1 element | |

| Some (x,y) -> | |

Some ((if x>xhd then xhd else x), (if y<xhd then xhd else y)) | |

Solution outlined here is quite trivial and use the pattern matching facilities of F#. In case of an empty list (line **3**), it returns `None`

; otherwise, it returns the **bound** as `Some (int*int)`

(line **8**).

Therefore, the signature of `bound`

is given by-

val bound : lst:int list -> (int * int) option |

Output of `bound`

–

> bound [1;2;3;4];; | |

val it : (int * int) option = Some (1, 4) | |

> bound [1];; | |

val it : (int * int) option = Some (1, 1) | |

> bound [];; | |

val it : (int * int) option = None |