epicours/Algo/Courses/Chapter 6 - Lists (Exercises).md

984 B

1.1 - Product

let rec product = function
	| [] -> 0
	| x::t -> x * product t;;

1.2 - Count

let rec count x n =
	if x = [] then
		0
	else
		let e::t = x in
		if e = x then
			1 + count t n
		else
			count t n;;
let rec search x n =
	if x = [] then
		0
	else
		let e::t = x in
		if e = x then
			true
		else
			search t n;;

1.4 - n^{th}

let rec length l = 
	if l = [] then
		0
	else
		let e::t = l in
			1 + length t;;
let rec nth x n =
	if (x = [] || n =< 0) then
		Invalid_arg "The number of element in the list is 0"
	else if length x < n then
		Failwith "The list is too short"
	else
		let e::t = x in
		if n = 0
			return e
		else
			nth t (n-1) ;;

1.5 - Maximum

let rec max_value list = match list with 
	| [] -> failwith "La liste est vide" 
	| [x] -> x 
	| hd :: tl -> 
		let max_tail = max_value tl in 
		if hd > max_tail then hd else max_tail;;

1.6 - Bonus second