Barry Jay macht in seinem Buch einige kühne Behauptungen - im Grunde genommen, indem er sagt, dass im Kern eines Programms alles entweder atomar oder komponiert ist. Dann können die Dinge einfach iteriert, gefiltert und aktualisiert werden, indem Sie einfach durch diese Kompositionsbeziehung navigieren.
Ist dies eine neue Grenze in der Informatik für Computersprachen - oder kehren wir einfach zu LISP zurück?
fl.formal-languages
Falkenauge
quelle
quelle
Antworten:
Einer der Hauptvorteile von Jays jüngster Arbeit besteht darin, dass der Boilerplate-Code, den man schreiben muss, um Datenstrukturen zu durchlaufen, um Operationen wie Map auszuführen, reduziert wird . Mit der Musterrechnung können Sie den Traversal-Code für alle Datenstrukturen einmal schreiben und auf Ihre eigene Datenstruktur anwenden. Dies reduziert sicherlich die Menge an Code, ermöglicht es Ihnen jedoch nicht, Programme zu schreiben, die Sie sonst nicht schreiben könnten. Natürlich gibt es viele interessante Ideen in der Arbeit, aber es bleibt zu zeigen, dass es tatsächlich funktioniert.
quelle
Ich bin nicht mit Barry Jays jüngster Arbeit vertraut, aber seine ältere Arbeit enthält Dinge, die Sie in Lisp nicht tun können, da die Typen zusätzliche Informationen enthalten.
Angenommen, Sie möchten die Größe einer Lisp-Datenstruktur definieren. Es ist 1 für ein Atom und n für eine Liste von n Atomen und allgemeiner Größe (x) + Größe (y) für
(cons x y)
.Werfen Sie nun Typen in die Mischung. Die Größe einer Liste wäre ihre Länge. Wie groß ist nun eine Liste von Atomlisten? Wenn Sie diese Datenstruktur als Liste betrachten (deren Elemente zufällig Listen von Atomen sind), ist die Antwort die Länge der Liste. Wenn Sie diese Datenstruktur als Atome enthaltend betrachten, die zufällig in einer Liste von Listen gespeichert sind, ist die Antwort die Summe der Längen der Elementlisten.
Mit Typen können Sie zwischen diesen beiden Ansichten (Formen) der Rohdaten unterscheiden. Sie benötigen ein Typsystem, mit dem Sie zwischen (List) (List Atom) und (List List) (Atom) unterscheiden können. Die häufigste Implementierung dieser Unterscheidung erfolgt mit Typklassen (wie in Haskell).
quelle