我如何在 Dafny 中表示一对(二元组)?

How do I represent a pair (two tuple) in Dafny?

我如何编写一个接受整数序列和 return 对序列的愚蠢 function?例如,输入 = [1,2],输出 = [Pair(1,1), Pair(1,2)]

我从

开始
function foo (l : seq<int>) : seq<Pair> 
{
  if |l| == 0 then [] 
  else new Pair() .... 
}

这似乎不起作用。

您不能在函数中使用 new,因为函数在 Dafny 中是纯函数,它们不能修改堆。要么使用 inductive datatypes

datatype Pair = Pair(fst:int, snd:int)

function foo (l : seq<int>) : seq<Pair> 
{
  if |l| <= 1 then [] 
  else [Pair(l[0],l[1])] + foo(l[2..]) 
}

或使用tuples

function foo (l : seq<int>) : seq<(int,int)> 
{
  if |l| <= 1 then [] 
  else [(l[0],l[1])] + foo(l[2..]) 
}