假设您有2个整数变量a和b 仅当使用匹配表达式a> b时,才如何交换它们? 如果<= b不要交换整数。
使用命令式语言:
dependencies {
compile project(':c')
}
在ocaml中执行相同的操作似乎非常困难。
我尝试过
CLASS
我要这样做是因为在下面的函数调用中,我想确保x是两个变量中的较大者。
答案 0 :(得分:3)
一种简单的方法:
let swap a b =
if (a>b) then (b,a)
else (a,b)
但这不等同于C代码,您的C代码正在交换变量的值-这就是命令式语言的工作方式。
在Ocaml中,没有副作用(除非您使用对某些int
的引用)。此swap
函数将返回一个元组,其成员始终是有序的(第一个成员将始终小于第二个成员)。
答案 1 :(得分:2)
没有状态,您不能“交换”变量的值,因为变量是不可变的。最好的选择是使用元组并在范围内引入新变量。示例:
let diff a b =
let (min, max) = if a <= b then (a, b) else (b, a)
in max - min
您当然可以使用相同的标识符并隐藏原始变量:
let diff a b =
let (a, b) = if a <= b then (a, b) else (b, a)
in b - a
尽管它对可读性并没有帮助。
答案 2 :(得分:0)
仅供参考,如果您要交换两个引用中的值,则如下所示:
let swap a_ref b_ref =
let a, b = !a_ref, !b_ref in
a_ref := b;
b_ref := a
;;
其类型为val swap : 'a ref -> 'a ref -> unit
。