Home > OS >  How to pass values of variables in OCaml
How to pass values of variables in OCaml

Time:06-08

In imperative languages I can easily write something like this:

if(x > y) {
        int t = x;
        x = y;
        y = t;
    }

The values of the variables are getting passed to another. However if I try writing this in Ocaml, the compiler sees this as a comparison, so it turns out to be bool:

if x > y then 
          let t = x in
          let x = y in
          let y = b in 

How can I pass the value of variables to another?

CodePudding user response:

Rather than variables, OCaml has named values. If you want to shuffle the names of some values, you can write:

let x, y =
 if x > y then y, x
 else x, y
in

CodePudding user response:

If you want to mirror the imperative code exactly you would write:

# let x = ref 2;;
val x : int ref = {contents = 2}
# let y = ref 1;;
val y : int ref = {contents = 1}

# let swap_if x y = if !x > !y then let t = !x in x := !y; y := t;;
val swap_if : 'a ref -> 'a ref -> unit = <fun>

# swap_if x y;;
- : unit = ()

# !x, !y;;
- : int * int = (1, 2)

Writing it functional you would do

let (x, y) = if x > y then (y, x) else (x, y)

or

let (x, y) = (min x y, max x y)

But note that this will not change x and y. Rather it creates new variables x and y that shadow the previous bindings.

  • Related