Functional programming 通过模式匹配交换变量?

Functional programming 通过模式匹配交换变量?,functional-programming,ocaml,Functional Programming,Ocaml,假设有两个整数变量a和b 仅当a>b时,如何使用匹配表达式交换它们? 如果a b->b,a |a,b当a,b 我之所以这样做是因为在下面的函数调用中,我想确保x是两个变量中较大的一个。一种简单的方法: let swap a b = if (a>b) then (b,a) else (a,b) 但这并不等同于C代码,您的C代码正在交换变量的值——这就是命令式语言所做的 在Ocaml中,没有副作用(除非您使用对某些int的引用)。此swap函数将返回一个元组,其成

假设有两个整数变量a和b 仅当a>b时,如何使用匹配表达式交换它们? 如果a b->b,a |a,b当a,b 我之所以这样做是因为在下面的函数调用中,我想确保x是两个变量中较大的一个。

一种简单的方法:

 let swap a b = 
     if (a>b) then (b,a) 
     else (a,b)
但这并不等同于C代码,您的C代码正在交换变量的值——这就是命令式语言所做的

在Ocaml中,没有副作用(除非您使用对某些
int
的引用)。此
swap
函数将返回一个元组,其成员总是按顺序排列的(第一个成员总是小于第二个顺序)。

一种简单的方法:

 let swap a b = 
     if (a>b) then (b,a) 
     else (a,b)
但这并不等同于C代码,您的C代码正在交换变量的值——这就是命令式语言所做的

在Ocaml中,没有副作用(除非您使用对某些
int
的引用)。此
swap
函数将返回一个元组,其成员总是按顺序排列的(第一个成员总是小于第二个顺序)。

如果没有状态,则无法“交换”变量的值,因为变量是不可变的。最好的方法是使用元组并在范围中引入新变量。例如:

let diff a b =
    let (min, max) = if a <= b then (a, b) else (b, a)
    in max - min
让差异a b=
let(min,max)=如果a没有状态,则不能“交换”变量的值,因为变量是不可变的。最好的方法是使用元组并在范围中引入新变量。例如:

let diff a b =
    let (min, max) = if a <= b then (a, b) else (b, a)
    in max - min
让差异a b=

let(min,max)=如果a仅供参考,如果您想交换两个参考中的值,则如下所示:

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

仅供参考,如果您想交换两个ref中的值,它将如下所示:

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