Dafny,按序列中的值替换索引

Dafny, replace index by value in sequences

rise4fun 的 Dafny 教程中,s[i := v] 被定义为用序列 s 中的 v 替换索引 i。 但是使用它总是失败 expected method call, found expression.

例如在下面的代码中交换两个索引

var a:int :=input[j];
var b:int :=input[j-1];
input[j := b]; //expected method call, found expression
input[j-1 := a]; //expected method call, found expression

在交换两个索引的情况下,s[i := v] 的正确使用方法是什么。

你可以写

var a:int :=input[j];
var b:int :=input[j-1];
input := input[j:=b] ;
input := input[j-i : a];

更简洁,但可能更难阅读

input := input[ j := input[j-1] ][ j-1 := input[j] ] ;