Pureの「reduce」がすごい

Pure言語には、「reduce」というマクロがあります。(PureではLispのようなマクロが使える)

これは、「与えられた式をもう一度評価する」というマクロです。一見単純なようですが、たくさんの応用ができそうです。
簡単な使い方を紹介します。

foo expr = reduce expr with
  a = 10;
end;

このように関数fooを定義します。
この関数は、「a=10が定義された状態でexprをもう一度評価してその結果を返す」という関数です。
「foo (2*a);」とすると、a=10が定義された状態で2*aが評価され、「2*10」となり、「20」が返ります。
さらに、

bar expr = (reduce expr with a = 2; end), (reduce expr with a = 4; end);

一行にまとめたので少し読みにくいですが、こんな関数も作れます。
「bar (10+a);」で、「12,14」が返ります。

これを利用すれば、さらにおもしろいプログラムが作れそうです。