[comp.lang.icon] backtracking rules

gudeman@CS.ARIZONA.EDU (David Gudeman) (05/03/90)

This problem with reversible assignment is part of a larger problem
that a lot of people seem to have with Icon.  That is the problem of
understanding where backtracking "goes".  In particular, the
reversible assignment problem seems to be caused by the following
misunderstanding: 

  global x
  procedure foo()
    x <- 1
    suspend x
  end

  procedure main()
    every foo()
  end

where people think that when foo gets resumed, that resumes every
expression in foo that suspended in the past.  But once you pass the
semi-colon (an implicit one in this case) the expression before the
semicolon is no longer suspended, it is finished.  Here is a good test
for what expressions in a procedure can be resumed after a suspend:
imagine what would happen if you replaced

  suspend EXPRESSION

with 

  every write(image(EXPRESSION))

basically, the sequence that would be written is the sequence that a
calling procedure would see.  Also, any backtracking that would be
done between written values gets done between real suspensions.  If
you wrote

  procedure foo()
    x <- 1
    every write(image(x))
  end

from above, would the assignment ever get reversed?