Given this snippet of OCaml code:
let rec ra开发者_如何学编程nge a b =
  if a > b then []
  else a :: range (a+1) b
  ;;
The Repl tells me that it's type is:
val range : int -> int -> int list = <fun>
Giving it inputs such as:
range 0 4;;
gives back the list:
- : int list = [0; 1; 2; 3; 4]
However providing the input
range -4 2;;
Gives the error:
Characters 0-5:
  range -4 1;;
 ^^^^^
This expression has type int -> int -> int list but is here used with type int.
What is this trying to tell me?
when you type,
range -4 2;;
you need to remember that the - is a function, an infix function, not a unary negation.
To do unary negation you can do one of two things, 1) preceede - sign with a ~, like ~-4, or use parenthesis.
I just realized that I need to wrap the
-4 in parenthesis
ie calling:
range (-4) 0;;
Gives:
- : int list = [-4; -3; -2; -1; 0]
I'll leave this question up incase anyone else comes across the same issue.
Just to summarize the issue is that - is interpreted as a function and not as the sign of the token 4.
You can see: OCaml language issues for more information.
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论