Given the following example (with dll defined as in the examples):
{ [x, 3] ** x :-> v ** (x + 1) :-> 0 ** (x + 2) :-> r ** dll(r, a, s) }
void helper (loc r)
{ dll(x, b, {v} ++ s) }
When run with -c 2 SuSLik outputs:
void helper (loc r) {
if (r == 0) {
} else {
let y = *(r + 1);
*(r + 2) = y;
*(r + 1) = 0;
helper(y);
helper(r);
}
}
Which, when called with r != 0 will recursively call itself with the same argument forever.
I tried to explore the tree in the online IDE, but am not familiar enough with the rules to figure out why the second recursive call was allowed. Possibly an issue in SuSLik or Cyclist, I'm not sure.
Given the following example (with
dlldefined as in the examples):When run with
-c 2SuSLik outputs:Which, when called with
r != 0will recursively call itself with the same argument forever.I tried to explore the tree in the online IDE, but am not familiar enough with the rules to figure out why the second recursive call was allowed. Possibly an issue in SuSLik or Cyclist, I'm not sure.