You cannot, at least not directly.
I do not know what UString , but I assume the Delete procedure modifies it. If you changed the S declaration in Remove_Character to S: in Ustring , you would probably get an error when calling Delete .
The easiest approach I can imagine is to make a copy of S in Is_Subset :
Copy_Of_S: UString := S;
and then pass the (modifiable) copy to Remove_Character .
By โsimplest,โ I mean that it makes minimal change to your existing code. But you should probably consider reorganizing it. Determining whether one UString is a subset of the other by modifying one of the lines does not seem to be the best approach; I am sure there is a more efficient way to do this.
Small and irrelevant point: this:
if Could_Remove = false then
better to write like:
if not Could_Remove then
source share