2009-10-24 21 views
27

Ich bin verwirrt durch alle eingebauten Mathematica-Funktionen, die in irgendeiner Art und Weise zu verhindern Auswertung vorgeben: Unevaluated, Defer, Hold, und mehr als ein halbes Dutzend das Formular Hold*. Die Mathematica-Dokumentation erklärt nur jede Funktion einzeln, ohne zu erklären, warum Sie das eine oder das andere auswählen würden. Kann jemand eine kohärente Erklärung all dieser Funktionen bieten? Das Ganze erscheint mir wie ein Chaos. Alles in Beziehung zu Lisp-Makros zu stellen, könnte ein guter Anfang sein.Mathematica: Unevaluated vs Aufschieben vs Halten vs Holdform vs HoldAllComplete vs etc etc

Die meisten der Mathematica-Sprache sind erstaunlich gut gestaltet, aber es scheint, als ob Wolfram sich in dieser Hinsicht wirklich in eine Ecke malte. Oder ich könnte etwas verpassen.

Antwort

11

Das sind ziemlich knifflige Konstrukte, und es ist schwer, klare Erklärungen zu geben; Sie sind nicht so einfach wie Lisp-Makros (oder, in der Tat, die Beziehung zwischen Lisp QUOTE und EVAL). Allerdings gibt es eine gute, lange Diskussion in Form von notes from Robby Villegas's 1999 talk "Unevaluated Expressions" auf Wolfram Website.

Defer wird in diesem Gespräch weggelassen, da es ab Mathematica 6.0 neu ist. Es ist sehr ähnlich wie HoldForm, außer dass es, wenn es in einem Front-End (aber nicht einem nackten Kernel) ausgegeben wird, abgezogen wird, einen Ausdruck hinterlassen, der als Eingabe verwendet werden kann. Dies ist sehr nützlich, wenn Sie Ausdrücke, die ein Benutzer bearbeiten und auswerten kann, z. B. in einer Palette, programmatisch erstellen können.

Verwandte Themen