Ich verstehe, wie die Präfixnotation auf einer bestimmten Ebene funktioniert, aber ich habe mich gefragt, ob es irgendwelche Tricks gibt, um sie intuitiv zu gestalten.
Anfangs schien es nicht intuitiv zu sein, aber jetzt finde ich es wunderbar und habe meistens gelesen. Es ist tatsächlich so, wie wir sprechen: "Die Summe von ..., das Produkt von ..." Es erfordert jedoch eine andere Art des Lesens. Jetzt wenden Sie den Operator einfach auf alle Argumente an, anstatt sie in einer Zeile zu lesen.
Mark C
Was ist falsch an der Präfixnotation? Fast alle Sprachen verwenden es. Funktionsaufrufe sind fast immer Präfixe.
SK-Logik
Nicht wirklich; "intuitiv" ist intuitiv, weil Sie es über 20 Jahre lang in Form mathematischer Konventionen gelernt haben. Da nur LISP und vielleicht einige andere Sprachen diese Konvention verwenden und Sie die andere noch viel mehr lernen, wird sie kaum jemals gleichermaßen "intuitiv". Und wir sprechen hier nur über einfache Ausdrücke (2 + 3 ... wie möchten Sie einen "halben Seiten" -Liner ausprobieren? :)
Rook
Antworten:
6
Es kann hilfreich sein, es von links nach rechts als gesprochene Sprache mit den richtigen Verben zu lesen. Zum Beispiel könnte (+ 3 2) "drei und zwei addieren" sein. Im allgemeineren Fall können Sie "$ operation für $ operanden ausführen" sagen. Auf denselben Fall angewendet: "Führen Sie den Addiervorgang für drei und zwei aus".
Sie würden rhetorische Fragen verwenden. :) Gleich? (Was?), "1 und 2! (Ähm ... Nein ...)
Arafangion
@RiceFlour (Hey, ich bin mit Reismehl aufgewachsen - ich habe ein Glutenproblem.) Ich würde lesen "Ist eins gleich zwei?" Oder "Sind die folgenden gleich?" Die Operatoren größer als und kleiner als sind in Präfixform nicht so natürlich, aber ich frage mich, wie oft sie im Lisp-Code verwendet werden.
Mark C
7
Tricks? Wozu?
Es fühlt sich für Sie noch nicht intuitiv an, weil Ihr mentaler Parser nicht daran gewöhnt ist. Es wird besser, wenn Sie es einfach verwenden und es immer wieder lesen.
Ich habe noch nicht einmal so viel davon gelesen , aber jetzt finde ich es wunderbar. Es scheint, dass mein Gehirn einen fast "taktilen" Sinn für die Klammern hat. Ich denke, das Gefühl wird nur noch schärfer.
Mark C
5
Man könnte es sich als eine Art Funktionsaufruf vorstellen:
(operator operand1 operand2 ...)
Daran ist nichts Besonderes. Wenn Sie Operatoren in C ++ (und vielen anderen Sprachen, die dies zulassen) überladen, müssen Sie diese Art von Funktion häufig genau so definieren:
Ja, so mache ich es. Wenn Sie einen Schritt zurücktreten und sich Methodenaufrufe in Java, C # usw. ansehen, handelt es sich eigentlich nur um eine Präfixnotation mit den Klammern an einer etwas anderen Stelle: MyMethod (arg1, arg2).
Nlawalker
4
Viele Sprachen verwenden eine Mischung aus Präfix, Infix und sogar Postfix.
Lisp verwendet nur das Präfix - standardmäßig. Wenn sin (x) aus der Mathematik intuitiv ist, dann ist (sin x) nicht weit entfernt. Wenn der Umzug (Hund, nach Hause) ein traditioneller Verfahrensaufruf ist, dann ist es in Lisp nur (Umzug nach Hause).
Lisp macht keine Ausnahme für Mathematik und behandelt +, -, * und andere wie gewöhnliche Funktionsaufrufe.
Als (irgendwann) "Alles ist ein Funktionsaufruf" (oder eine spezielle Form oder eine Makroerweiterung, die beide die Oberflächensyntax "Funktionsaufruf" haben) angeklickt wurde, fühlte es sich ziemlich natürlich an.
Also, denn (= 1 2)ich habe gelesen, dass 'call the numeric gleich Vergleich auf 1 und 2'.
Antworten:
Es kann hilfreich sein, es von links nach rechts als gesprochene Sprache mit den richtigen Verben zu lesen. Zum Beispiel könnte (+ 3 2) "drei und zwei addieren" sein. Im allgemeineren Fall können Sie "$ operation für $ operanden ausführen" sagen. Auf denselben Fall angewendet: "Führen Sie den Addiervorgang für drei und zwei aus".
quelle
( = 1 2 )
und( > 4 2 )
Tricks? Wozu?
Es fühlt sich für Sie noch nicht intuitiv an, weil Ihr mentaler Parser nicht daran gewöhnt ist. Es wird besser, wenn Sie es einfach verwenden und es immer wieder lesen.
quelle
Man könnte es sich als eine Art Funktionsaufruf vorstellen:
Daran ist nichts Besonderes. Wenn Sie Operatoren in C ++ (und vielen anderen Sprachen, die dies zulassen) überladen, müssen Sie diese Art von Funktion häufig genau so definieren:
quelle
Viele Sprachen verwenden eine Mischung aus Präfix, Infix und sogar Postfix.
Lisp verwendet nur das Präfix - standardmäßig. Wenn sin (x) aus der Mathematik intuitiv ist, dann ist (sin x) nicht weit entfernt. Wenn der Umzug (Hund, nach Hause) ein traditioneller Verfahrensaufruf ist, dann ist es in Lisp nur (Umzug nach Hause).
Lisp macht keine Ausnahme für Mathematik und behandelt +, -, * und andere wie gewöhnliche Funktionsaufrufe.
quelle
Als (irgendwann) "Alles ist ein Funktionsaufruf" (oder eine spezielle Form oder eine Makroerweiterung, die beide die Oberflächensyntax "Funktionsaufruf" haben) angeklickt wurde, fühlte es sich ziemlich natürlich an.
Also, denn
(= 1 2)
ich habe gelesen, dass 'call the numeric gleich Vergleich auf 1 und 2'.quelle