문자의 입력 배열을 취하고 입력 배열로 구성된 다른 배열을 역순으로 출력하는 메서드를 구현하고 싶습니다. 1 개 인덱스 범위를 6에서Dafny 메서드가 반전 된 문자 배열을 반환합니다.
predicate reversed (arr : array<char>, outarr: array<char>)
requires arr != null && outarr != null
//requires 0<=k<=arr.Length-1
reads arr, outarr
{
forall k :: 0<=k<=arr.Length-1 ==> outarr[k] == arr[(arr.Length-1-k)]
}
method yarra(arr : array<char>) returns (outarr : array<char>)
requires arr != null && arr.Length > 0
ensures outarr != null && reversed(arr,outarr)
{
var i:= 0;
var j:= arr.Length-1;
outarr := new char[arr.Length];
outarr[0] := arr[j];
i := i+1;
j := j-1;
while i<arr.Length && 0<=j<arr.Length
invariant 0<=i<=arr.Length
decreases arr.Length-i, j
{
outarr[i] := arr[j];
i:=i+1;
j:=j-1;
}
//return outarr;
}
method Main()
{
var s := ['a','b','a','b','a','b','a','b','a','b','a','b'];
var a,b,c,d := new char[5], new char[5], new char[5], new char[5];
a[0], a[1], a[2], a[3], a[4] := 'y', 'a', 'r', 'r', 'a';
d[0], d[1], d[2], d[3], d[4] := 'y', 'a', 'r', 'r', 'a';
b := yarra(a);
c := yarra(b);
assert c[..] == a[..];
//assert c.Length > -2;
//assert d[0] == a[0];
//print c; print a;
}
- 오류 : 내 코드하지만 오류 "우리의 범위의 인덱스"내가 여기
일이 무엇인지 전혀 모르는 을 "후 상태가 유지되지 않을 수도 있습니다"가지고있다 43
- 오류 2이 리턴 경로에 사후 조건이 적용되지 않을 수 있습니다. 21 2
이것은 보유 할 수없는 사후 조건입니다. (13) (26)
stdin.dfy (6,43) : 오류 : 인덱스 범위를 벗어
stdin.dfy (21,2) : 오류 BP5003 : 사후 조건이 반환 경로에 개최하지 않을 수 있습니다.
stdin.dfy (13,26) : 관련 위치 : 이것은 보유 할 수없는 사후 조건입니다.
stdin.dfy (6,2) : 관련 위치
stdin.dfy (6,47) : 관련 위치