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