;;; make a three element list vars list =[1 2 3]; define test(); ;;; dynamically scope the second element dlocal %hd(tl(list))%; [original list ^list]=> ;;; update second element 5 -> hd(tl(list)); [updated list ^list] => enddefine; test(); ** [original list [1 2 3]] ** [updated list [1 5 3]] ;;; But the value of hd(tl(list)) has been restored on exit: list => ** [1 2 3]