First 3 problems
This commit is contained in:
		
						commit
						894525b663
					
				
							
								
								
									
										79
									
								
								README.org
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								README.org
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,79 @@
 | 
			
		||||
#+TITLE: 99 Ocaml Problems
 | 
			
		||||
#+Author: Joseph Ferano
 | 
			
		||||
 | 
			
		||||
*** #1 - Tail of a list
 | 
			
		||||
 | 
			
		||||
Write a function ~last : 'a list -> 'a option~ that returns the last element of a
 | 
			
		||||
list
 | 
			
		||||
 | 
			
		||||
#+begin_src ocaml
 | 
			
		||||
# last ["a" ; "b" ; "c" ; "d"];;
 | 
			
		||||
- : string option = Some "d"
 | 
			
		||||
                      # last [];;
 | 
			
		||||
- : 'a option = None
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
**** Solution
 | 
			
		||||
#+begin_src ocaml
 | 
			
		||||
let rec last = function
 | 
			
		||||
  | []    -> None
 | 
			
		||||
  | [x]   -> Some x
 | 
			
		||||
  | _::xs -> last xs 
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
*** #2 - Last two elements of a list
 | 
			
		||||
 | 
			
		||||
Find the last but one (last and penultimate) elements of a list.
 | 
			
		||||
 | 
			
		||||
#+begin_src ocaml
 | 
			
		||||
# last_two ["a"; "b"; "c"; "d"];;
 | 
			
		||||
- : (string * string) option = Some ("c", "d")
 | 
			
		||||
# last_two ["a"];;
 | 
			
		||||
- : (string * string) option = None
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
**** Solution
 | 
			
		||||
#+begin_src ocaml
 | 
			
		||||
let rec last_two = function
 | 
			
		||||
  | [] | [_] -> None
 | 
			
		||||
  | [x;y] -> Some (x,y)
 | 
			
		||||
  | _::xs -> last_two xs
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
*** #3 - N'th element of a list
 | 
			
		||||
 | 
			
		||||
Find the N'th element of a list.
 | 
			
		||||
 | 
			
		||||
REMARK: OCaml has List.nth which numbers elements from 0 and raises an exception
 | 
			
		||||
if the index is out of bounds.
 | 
			
		||||
 | 
			
		||||
#+begin_src ocaml
 | 
			
		||||
# List.nth ["a"; "b"; "c"; "d"; "e"] 2;;
 | 
			
		||||
- : string = "c"
 | 
			
		||||
# List.nth ["a"] 2;;
 | 
			
		||||
Exception: Failure "nth".
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
**** Solution
 | 
			
		||||
#+begin_src ocaml
 | 
			
		||||
let rec nth index = function
 | 
			
		||||
  | [] -> failwith "nth"
 | 
			
		||||
  | x::xs -> if index = 0 then x else nth (index - 1) xs
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
*** #4 Find the number of elements of a list.
 | 
			
		||||
 | 
			
		||||
OCaml standard library has List.length but we ask that you reimplement it. Bonus for a tail
 | 
			
		||||
recursive solution.
 | 
			
		||||
 | 
			
		||||
#+begin_src ocaml
 | 
			
		||||
# length ["a"; "b"; "c"];;
 | 
			
		||||
- : int = 3
 | 
			
		||||
# length [];;
 | 
			
		||||
- : int = 0
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
**** Solution
 | 
			
		||||
#+begin_src ocaml
 | 
			
		||||
 | 
			
		||||
#+end_src
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user