Kurz gesagt und für diejenigen, die es nicht wussten, werden Lisp-Funktionen / Operatoren / Konstrukte alle einheitlich so genannt:
(function arg0 arg1 ... argN)
Also, was in einer C-ähnlichen Sprache würden Sie ausdrücken als
if (a > b && foo(param))
verwandelt sich in einen Lisp Sexp wie
(if (and (> a b) (foo param)))
. Wenn die Dinge realer / komplizierter werden, tun dies für mich auch die entsprechenden S-Ausdrücke.
Ich bin mir bewusst, dass dies höchstwahrscheinlich eine subjektive Frage ist, aber - ist dies für viele Lisp-Hacker ein kleiner Ärger, mit dem man sich immer befassen muss?
Oder gewöhnt man sich früher oder später meistens an diese (fehlende) Syntax?
Ist das Hinzufügen von Bruchkanten (die Sie meistens nicht in Ihrem C-Äquivalent hinzufügen würden) zur besseren Lesbarkeit auf jeden Fall eine gute Idee, insbesondere auf lange Sicht? Alle anderen Vorschläge wären willkommen.
quelle
Antworten:
Wie analysierst du?
Der Analysebaum sieht wahrscheinlich so aus
hmm ... lassen Sie uns diesen Baum in eine Liste mit Präfixnotation serialisieren
Dieses Analysebaumformat ist ziemlich einfach zu manipulieren, aber ich habe ein Problem. Ich hasse Trennzeichen. Ich mag Terminatoren. Gleichzeitig streue ich gerne in Leerzeichen.
hmm ... das zusätzliche Leerzeichen erschwert das Parsen bestimmter Dinge ... Vielleicht könnte ich einfach eine Regel aufstellen, dass der Baum als (Wurzelblatt Blattblatt) dargestellt wird.
Nun meine Serialisierung eines Parse - Baums ist Lisp (Umbenennungsfunktion anzuwenden, und dies wahrscheinlich läuft). Wenn ich Programme möchte, die Programme schreiben, ist es nett, nur Analysebäume zu manipulieren.
Dies ist nicht ganz der Grund, warum S-Ausdrücke entstanden sind, aber es wurde früh erkannt und es ist eine Funktion, die Lisp-Programmierer verwenden. Unsere Programme sind in gewissem Sinne vorab analysiert, und das Schreiben von Programmen zum Bearbeiten von Programmen ist aufgrund des Formats ziemlich einfach. Deshalb wird der Mangel an Syntax manchmal als Stärke angesehen.
Verwenden Sie jedoch, wie David sagte, einen S-Ausdruck-fähigen Editor. Es ist wahrscheinlicher, dass Sie den Überblick über eine schließende Klammer in einem S-Ausdruck verlieren als über eine schließende Klammer in XML (
</foo>
schließt nur<foo>
, aber der rechte Paren schließt JEDEN S-Ausdruck). Bei Schlägern werden die meisten Probleme durch die Verwendung eckiger Klammern für einige Ausdrücke in Verbindung mit einem guten Einrückungsstil behoben.Die Lisp-Version:
Nicht so schlecht.
quelle
Das Schöne an s-exp ist, dass man sie nach kurzer Zeit nicht mehr sieht. Für die Augen ist es wie Python, ABER der Computer hat den Baum immer noch leicht.
Das Einrücken erfolgt also automatisch, es gibt keine Mehrdeutigkeit, Sie müssen nicht zweimal die Tabulatortaste drücken oder ähnliches, wenn Sie einen Block beenden möchten.
Wenn Sie einen zufälligen Code auswählen, kann das gesamte Material mit nur einem Befehl Ihres Lieblingseditors leicht eingerückt werden
Sie können ganz einfach durch Ihren Code navigieren , zwischen s-exp wechseln, sie austauschen und so weiter mit einem guten Editor
Da die Daten, die Sie bearbeiten, mit denen des von Ihnen geschriebenen Codes übereinstimmen, können Sie Ihren Code auch in derselben Sprache bearbeiten, oder?
Nun, Sie können es tun, das sind Makros, Sie manipulieren den Code, den Sie schreiben, bevor er wie jede andere Liste ausgewertet wird. Deshalb wird gesagt, dass Lisp eine "programmierbare Programmiersprache" ist. Sie schreiben Code, der Ihren Code für Sie schreibt.
Hier ist ein schöner Artikel, der die Natur von Lisp beschreibt und warum Lisp-Programmierer grinsten, wenn sie XML sehen.
quelle