Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OCaml Summation

Tags:

ocaml

I'm trying to make a function in OCaml which does the summation function in math. I tried this:

sum n m f =
    if n = 0 then 0
    else if n > m then f
    else f + sum (n + 1) m f;;

However, I get an error - "Characters 41-44: else f * sum(n + 1) m f;; Error: Unbound value sum and sum is underlined (has carrot signs pointing to it)

I looked at this: Simple OCaml exercise It's the same question, but I see a lot of other things that I do not have. For example, for my n = m case, I do not have f n and then in the else case, I do not have f m.

Why do you need f n if you want the function to return an integer? D: What's the problem!? Thanks in advance.

like image 851
Supervisor Avatar asked Dec 03 '22 03:12

Supervisor


2 Answers

You forgot rec.

let rec sum n m f = ...

For recursive functions, you must manually include the "rec" keyword.

like image 197
Kristopher Micinski Avatar answered Jun 05 '23 08:06

Kristopher Micinski


  1. You must use the keyword let to introduce a new function, and let rec when this function is recursive.

  2. Why is the first argument named f? If it is a function you should apply it to something.

  3. if n = 0 then 0 what a strange convention! Are you sure you want this? Idem for if n > m then f

For now, your code is equivalent to

let sum a b c =
  if a = 0 then 0
  else if a > b then c
  else if a < 0 then min (-a*c) ((b-a+1)*c)
  else (b-a+1)*c
like image 37
Thomash Avatar answered Jun 05 '23 07:06

Thomash