csci-350-lab1 / ack.ml

print_endline("Prints the Ackermann function of M and N");;
print_string("Enter M: ");;
let m = read_int();;
print_string("Enter N: ");;
let n = read_int();;

(* The Ackermann function takes two parameters, m and n *)
let rec ack = function
   (* Ensure m and n are non-negative *)
   | m,n when m < 0 || n < 0 -> invalid_arg "Ackermann's function is only defined over the non-negative integers"
   (* If m = 0 and n is anything *)
   | 0,n -> n+1
   (* If m is anything and n = 0 *)
   | m,0 -> ack (m-1,1)
   (* Any other values for m and n *)
   | m,n -> ack (m-1,ack (m,n-1))
;;

print_endline(string_of_int (ack (m,n)));;
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.