asdfman
Commander
- Registriert
- März 2008
- Beiträge
- 2.315
Yuuri schrieb:Der Interpreter kann aber nur einfache Gleichungen aufschlüsseln oder? Mir schwebt da was wie z.B. 1/5x^4+2x^2+1 oder solche Scherze wie e-Funktionen und Logarithmen ein (kurz gesagt Kurvendiskussion). Wenn er auch solche "komplexen" Gleichungen aufschlüsselt, würde ich mal einen Blick rein werfen.
Natürlich kann er das. Es ist so wie er im Buch steht ein vollständiger Lisp-Interpreter. Du gibst
ihm halt einfach alle Operatoren, die du brauchst als Primitive mit, dann kann er das. Exponentiation
ist entweder ein Einzeiler, oder du schreibst eine winzige Funktion, die das implementiert selbst.
Gibt ja schön schnelle Algorithmen dafür.
€: Ein Beispiel für numerische Differentiation ist auch drin, wenn du sowas haben willst und später
kommt ein Programm, das symbolische Ableitungen durchführen kann. Das ist aber relativ simpel,
denn SICP ist immer noch ein Buch für Einsteiger. Zum Beispiel kann jeder Operator nur zwei Operanden
haben, so dass der symbolische differentiator z.B. nicht (* 1 2 3 4) sondern (* 1 (* 2 (* 3 4))) ausgibt.
Das bekommt man also nicht fertig vorgekaut, sondern muss das Programm entsprechend erweitern.
Das nötige Handwerkszeug dazu bekommt man von SICP allerdings. Und es ist auf beliebige Sprachen
und nicht nur Lisp anwendbar. Das erfordert dann natürlich entsprechende Portierarbeit. An die Syntax
von Lisp ist man auch nicht gebunden. Man muss dann nur den Teil, der den fertigen Ausdruck baut,
statt einer S-Expression einen "normalen" mathematischen Ausdruck bauen lassen.
€2: Ein Beispiel dazu:
Der symbolische Ableiter hat eine Funktion der Art (MAKE-SUM A B), die den Ausdruck (+ A B) ausgibt
(Also jeweils den Wert der Variablen A und B). Stattdessen muss man die Funktion halt ändern, dass
sie A + B ausgibt und das war es dann schon erstmal.
Das Programm spuckt immer richtige Ergebnisse aus, aber dafür halt oft unschöne. Da ist dann halt
Arbeit gefragt, die über ein Buch für Einsteiger hinausgeht. Statt (expt x 4), das für x^4 steht, gibt
der ähnlich den obigen Beispiel dann (* x (* x (* x x))) aus. Das ist natürlich mathematisch korrekt,
aber übelst hässlich ausgedrückt.
Zuletzt bearbeitet: