Wenn wir die Ausdrücke "statisch typisiert" und "dynamisch typisiert" als Jargon betrachten, der sich darauf bezieht, dass eine Sprache die Gültigkeit von Operationen gegen Typen prüft, dann denke ich, dass es fair ist, Mathematica mit dem Jargon "untypisiert" zu charakterisieren - in dem Sinne, dass es "nie" prüft, ob eine Operation für einen Typ gültig ist.
Mir gefällt jedoch Belisarius' Verwendung des Begriffs "typagnostisch". Ich sage dies, weil fast alle Typüberprüfungen in der Sprache idiomatisch sind (d.h. vom Programmierer und nicht von der Sprache implementiert), so auch das Konzept der Anwendung eines Operators auf typisierte Operanden!
Nehmen wir das "unsinnige" Beispiel von 1 + "foo"
. Ich denke, man kann mit Fug und Recht behaupten, dass ein signifikanter Anteil aller Mathematica-Benutzer beim Erlernen der Sprache über Fälle wie diesen stolpert (fast die Hälfte). Das Problem wird besonders deutlich, wenn man Code im Stil von z.B. C schreibt. In Mathematica-Kreisen wird viel darüber diskutiert, wie man mit solchen Situationen umgehen soll.
Andererseits ist diese Schwäche auch die größte Stärke von Mathematica. Mathematica ist für die Erstellung neuer Notationen optimiert. Viele, viele Notationen haben das Konzept der +
die sich sehr ähnlich verhält wie die Addition in der Grundrechenart. Beim Aufbau einer solchen Notation wäre es sehr unangenehm, wenn Mathematica sich einmischen und beanstanden würde, dass die Operanden zu +
waren keine Zahlen. In einer solchen übergeordneten Anwendung von Mathematica ist das "unsinnige" Beispiel nicht nur "sinnvoll", sondern sogar entscheidend.
In diesem Sinne ist die Frage nach dem Typ häufig überflüssig. Daher mag ich Belisarius ' "typ-agnostische" Charakterisierung. Upvote ihn, ich habe ;)
Editer
Ich werde versuchen zu verdeutlichen, was ich im Sinn hatte, als ich zwischen "untypisiert" und "typagnostisch" unterschied.
Beim Lesen der verschiedenen Antworten und Kommentare habe ich versucht herauszufinden, was der Unterschied zwischen Mathematica und LISP ist. Letzteres wird im Allgemeinen als Beispiel für "dynamisch typisiert" angeführt, obwohl der LISP-Kernauswerter sehr ähnlich wie Mathematica ist und kaum eine Typüberprüfung durchführt. Die Typfehler, die wir in LISP-Programmen sehen, werden meist durch hart kodierte Prüfungen in (typischerweise eingebauten) Funktionen verursacht. +
akzeptiert beispielsweise nur numerische Argumente, obwohl es dem Auswerter selbst völlig gleichgültig ist, ob es sich um eine oder eine andere Variante handelt. Abgesehen davon unterscheidet sich das "Gefühl" der Programmierung in LISP stark von dem "Gefühl" von Mathematica (zumindest für mich). Die 1 + "foo"
Beispiel macht diesen Unterschied deutlich.
Ich stimme zwar im Großen und Ganzen mit "untyped" als Charakterisierung von Mathematica überein, hatte aber dennoch das Gefühl, dass etwas fehlt. Assembler scheint mir untypisiert zu sein, ebenso wie das frühe FORTRAN und das prä-ANSI C. In diesen Fällen war das Bitmuster der Argumente alles, was zählte, und die Programme machten munter weiter, wenn ich ein String-Argument übergab, wo eine ganze Zahl benötigt wurde. Mathematica hat dieses untypisierte Verhalten mit Sicherheit. Aber es gibt einen Unterschied: In Assembler, FORTRAN und C ist es extrem selten, dass diese fehlende Typüberprüfung zu einem guten Ergebnis führt. Wie ich bereits erwähnt habe, ist es in Mathematica möglich und manchmal sogar üblich, sich auf diese Art von Verhalten zu verlassen.
Geben Sie "typ-agnostisch" ein. Ich mochte seine unverbindliche Haltung, die weniger drastisch klang als "untyped". Ich hatte das Gefühl, dass es die im Wesentlichen untypisierte Natur von Mathematica widerspiegelt, aber einen gewissen Spielraum für die Sprachfunktionen lässt, die eine idiomatische Typüberprüfung im dynamischen LISP-Stil unterstützen (z.B. das "head"-Idiom und unterstützende Funktionen).
Kurzum, ich habe das Gefühl, dass Mathematica zwischen völlig untypisiert und dynamisch typisiert schwankt. "Type-agnostic" fängt dieses Gefühl für mich ein. YMMV :)
Ich gebe bereitwillig zu, dass niemand etwas von dem, was ich in dieser Antwort geschrieben habe, einfach aus der Inspektion der Ausdrücke "untyped" und "type-agnostic" rekonstruieren kann. Ich betone nochmals, dass ich denke, dass "untyped" eine faire Charakterisierung von Mathematica ist, aber ich mag auch die Tatsache, dass "type-agnostic" viele der Fragen aufwirft, die in den verschiedenen Antworten auf diese SO-Frage angesprochen werden.