Mathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc etc

Jestem oszołomiony przez wszystkie wbudowane funkcje Mathematica, które rzekomo zapobiegają ewaluacji w jakiś sposób: Unevaluated, Defer, Hold, i ponad pół tuzina postaci Hold*. Dokumentacja Mathematica po prostu wyjaśnia każdą funkcję w izolacji, nie wyjaśniając, dlaczego wybrałbyś jedną lub drugą. Czy ktoś może zaproponować spójne wyjaśnienie wszystkich tych funkcji? Wszystko wydaje mi się zawiłe. Nawiązanie tego wszystkiego do makr Lispa może być dobrym miejscem do zaczynaj.

Większość języka Mathematica jest niesamowicie dobrze zaprojektowana, ale wydaje się, że Wolfram naprawdę zamalował się w rogu w tym aspekcie. Albo coś mi umyka.

Author: RBarryYoung, 2009-10-24

1 answers

Są to dość skomplikowane konstrukcje i trudno jest udzielić jasnych wyjaśnień; nie są one tak proste jak makra Lispu(lub, w tym przypadku, relacja między QUOTE I EVAL). Jednak istnieje dobra, długa dyskusja dostępna w formie notatek z wykładu Robby ' ego Villegasa z 1999 roku "Unevaluated Expressions" na stronie internetowej Wolframa.

Defer jest pominięty w tej rozmowie, ponieważ jest nowy od Mathematica 6.0. To bardzo podobne do HoldForm, tyle że kiedy to wyjście W front-endzie (ale nie nagie jądro) jest pozbawione, pozostawiając wyrażenie, które może być użyte jako wejście. Jest to bardzo przydatne, jeśli chcesz programowo konstruować wyrażenia, które użytkownik może edytować i oceniać, np. w palecie.

 11
Author: Pillsy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-27 13:05:51