如何编写一个dafny function
,它接受一系列int并返回一对Pairs?例如,input = [1,2],output = [Pair(1,1),Pair(1,2)]
我从
开始function foo (l : seq<int>) : seq<Pair>
{
if |l| == 0 then []
else new Pair() ....
}
似乎不起作用。
答案 0 :(得分:1)
你不能在函数中使用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..])
}