Home > Blockchain >  Identify If The List Is Empty
Identify If The List Is Empty

Time:01-25

I am entirely new to F# I have this function that calculates the sum of the two different x and y points like this let vAdd (x1, y1) (x2, y2) : float * float = (x1 x2, y1 y2) and then I have another function that takes a list of the points and then uses vAdd to do the calculation. let vSum [(x1, y1); (x2, y2)] = vAdd (x1, y1) (x2, y2)

Now my question would be, how would I check and throw some error if the list given is empty? I tried with if ... then failwith "list is empty" but IsEmpty wasn't working. Another thing that I have looked at was pattern matching, but again, I don't know how it would work with my specific function. F# Check if a list is empty

Any help would be appreciated, and thanks in advance!

CodePudding user response:

The most elegant approach is to use pattern matching, which lets you check that the list has exactly two elements and extract their values:

let vSum list = 
  match list with
  | [(x1, y1); (x2, y2)] -> vAdd (x1, y1) (x2, y2)
  | _ -> failwith "The list did not have two elements!"

You can slightly shorten this by using the function keyword, which is a shortcut for a function taking a variable and pattern matching on it:

let vSum = function
  | [(x1, y1); (x2, y2)] -> vAdd (x1, y1) (x2, y2)
  | _ -> failwith "The list did not have two elements!"

That said, if you always want to pass around two things, you should not be using a list, but use a tuple instead. You can have a tuple of tuples - that is fine - but if you know it is exactly two elements, then using a list is breaking the rule "make invalid states unrepresentable".

  •  Tags:  
  • Related