如何在SML中返回2对?

时间:2017-01-30 21:30:00

标签: sml

我是SML编程的初学者。我编写了一个需要4个输入的程序,并对它们进行了一些更改。现在我希望这个程序返回2对作为结果。这是代码:

fun Move(n,k,z,b): int * int =
if (n=1) then (k+1,z)
else (k,z);

现在在if语句中我想同时返回例如(k + 1,z)和(n,b),而不仅仅是(k + 1,z)。是否可以不使用清单(我的意思是以产品的形式返回)?如果是这样,我应该如何更改代码?

1 个答案:

答案 0 :(得分:0)

听起来你应该阅读一本介绍性的书,例如H&RML for the Working Programmer

就像(k+1,z)k+1z的产品一样,您可以制作(k+1,z)(n,b)的产品。这样的值可以是((k+1,z), (n,b)),是两个元组的两元组,或者(k+1, z, n, b)是四元组。它们是同构的,所以选择你喜欢的。

实际上,输入参数(n,k,z,b)可能看起来好像是四个不同的值,但同时,它们是一个四个值的乘积。按照ML中的惯例为您的函数赋予小写名称,并且由于 if-then-else 仅影响k,您可能拥有:

fun move (n, k, z, b) = (n, if n = 1 then k+1 else k, z, b)

使用模式匹配而非 if-then-else ,您可能拥有:

fun move (1, k, z, b) = (1, k+1, z, b)
  | move (n, k, z, b) = (n, k,   z, b)

虽然我不确定为什么这个功能有意义。