Why in Declarative Programming variables are not reassigned?
This isn't as exotic as it sounds, and you can do it in a procedural language fairly easily.  The basic idea is just that instead of changing a value you just have a function return a new value.  For instance, instead of something like

string read()
{
  string s = '';

  while((string c = getchar()) != '\n')
  {
    s += c;
  }

  return s;
}


you could write something like

string read()
{
  string c = getchar();

  if(c == '\n')
  {
    return '';
  }
  else
  {
    return c + read();
  }
}


See how no variable ever gets reassigned here?

There are some subtleties here that I'm not going into, but I just wanted to illustrate that the idea is not that farfetched.