我是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)。是否可以不使用清单(我的意思是以产品的形式返回)?如果是这样,我应该如何更改代码?
答案 0 :(得分:0)
听起来你应该阅读一本介绍性的书,例如H&R或ML for the Working Programmer。
就像(k+1,z)
是k+1
和z
的产品一样,您可以制作(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)
虽然我不确定为什么这个功能有意义。