Frage

Ich bin verwirrt von all den integrierten Mathematica-Funktionen, die vorgeben, die Bewertung in irgendeiner Weise zu verhindern: Unevaluated, Defer, Hold, und über ein halbes Dutzend Form der Form Hold*. Die Mathematica -Dokumentation erklärt jede Funktion nur isoliert, ohne zu erklären, warum Sie das eine oder andere auswählen würden. Kann jemand eine kohärente Erklärung all dieser Funktionen anbieten? Das Ganze scheint mir ein verschlungenes Durcheinander zu sein. In Bezug auf LISP -Makros ist es möglicherweise ein guter Ausgangspunkt, das alles zu erzählen.

Der größte Teil der Mathematica-Sprache ist erstaunlich gut gestaltet, aber es scheint, als hätte sich Wolfram in dieser Hinsicht wirklich in eine Ecke gemalt. Oder ich könnte etwas vermissen.

War es hilfreich?

Lösung

Dies sind ziemlich schwierige Konstrukte, und es ist schwierig, klare Erklärungen zu geben. Sie sind nicht so einfach wie Lisp -Makros (oder die Beziehung zwischen Lisps QUOTE und EVAL). Es gibt jedoch eine gute, lange Diskussion in Form von Notizen aus Robby Villegas '1999 Gespräch "unegelegene Ausdrücke" Auf der Website von Wolfram.

Defer wird in diesem Vortrag weggelassen, weil es ab Mathematica 6.0 neu ist. Es ist sehr ähnlich HoldForm, außer dass es, wenn es in einem Front-End (aber nicht in einem nackten Kern) ausgegeben wird, weggezogen wird und einen Ausdruck hinterlässt, der als Eingang verwendet werden kann. Dies ist sehr nützlich, wenn Sie Ausdrücke programmgesteuert konstruieren möchten, die ein Benutzer bearbeiten und bewerten kann, z. B. in einer Palette.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top