v.01

{ x: 10, foo: 20, bar: "foo + x", baz: "bar^2" }


%mathpiper

list := '[ x: 10, foo: 20, bar: (foo + x), baz: (bar^2)];

length := Length(list);

index := 1;

While(index <=? length)
{
    element := list[index];

    Echo("Substitute '" + element[2] + "' for '" + element[1] + "' in " + list);
    
    list := Substitute(element[1], element[2]) list;
    
    Echo("result: " + list); Echo();

    index++;
}

Eval(list);

%/mathpiper

    %output,mpversion=".235",preserve="false"
      Result: [10:10,20:20,(20 + 10):30,((20 + 10)^2):900]
      
      Side Effects:
      Substitute '10' for 'x' in [x:10,foo:20,bar:(foo + x),baz:(bar^2)]
      result: [10:10,foo:20,bar:(foo + 10),baz:(bar^2)]
      
      Substitute '20' for 'foo' in [10:10,foo:20,bar:(foo + 10),baz:(bar^2)]
      result: [10:10,20:20,bar:(20 + 10),baz:(bar^2)]
      
      Substitute '20 + 10' for 'bar' in [10:10,20:20,bar:(20 + 10),baz:(bar^2)]
      result: [10:10,20:20,(20 + 10):(20 + 10),baz:((20 + 10)^2)]
      
      Substitute '(20 + 10)^2' for 'baz' in [10:10,20:20,(20 + 10):(20 + 10),baz:((20 + 10)^2)]
      result: [10:10,20:20,(20 + 10):(20 + 10),((20 + 10)^2):((20 + 10)^2)]
      
      
.   %/output