Stellt Pattern Calculus einen Fortschritt in Sprachen dar oder kehren wir einfach zu LISP zurück?

11

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?

Falkenauge
quelle
13
Zurück nach Lisp zu gehen wäre ein Schritt nach vorne.
Shane
4
Dies ist keine scharf definierte Frage: Es sollte ein Community-Wiki sein.
Charles Stewart
Stimmen Sie @Shane zu, aber denken Sie, es braucht Typen und eine Reihe moderner Bibliotheken
Hawkeye

Antworten:

6

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.

Dave Clarke
quelle
6

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).

Gilles 'SO - hör auf böse zu sein'
quelle