2010-06-01 18 views
17

Ich möchte Sie fragen, welches formelle System interessanter wäre, um von Grund auf neu zu implementieren.Was ist interessanter oder leistungsfähiger: Curry, Mercury oder Lambda-Prolog?

Ich habe einige bestehende und Open-Source-Projekte von logischen/deklarativen Programmiersystemen untersucht. Ich habe beschlossen, in meiner Freizeit etwas Ähnliches zu erfinden oder zumindest die allgemeine Idee der Umsetzung zu verstehen.

Es wäre großartig, wenn einige dieser Systeme die meiste Ausdruckskraft und Prägnanz moderner akademischer Untersuchungen in der Logik und ihrer Beziehung zu Rechenmodellen liefern würden.

Was würden Sie empfehlen, zumindest auf konzeptioneller Ebene zu lernen? Zum Beispiel ist Lambda-Prolog besonders interessant, weil es Beziehungen höherer Ordnung erlaubt, aber AFAIK basiert auf intuitionistischer Logik und daher fehlt das ausgeschlossene Mittel-Prinzip; das ist generell ein Nachteil für mich.

Ich würde auch alle Vorschläge über moderne logische Programmiersysteme begrüßen, die weniger populär, aber ausdrucksstärker/leistungsfähiger sind.

+0

Dies ist eine ähnliche Frage: http://stackoverflow.com/questions/17675133/most-useful-insstruct-functional-logic-language-to-learn?rq=1 –

Antwort

16

Prolog war die erste Sprache, die meine Sichtweise bei der Programmierung veränderte. Aber später fand ich es nicht so hochgradig, wie ich es gerne sehen würde.

Curry - Ich habe nur Munster CC versucht, und fand es etwas unbequem. Zu diesem Zeitpunkt beschloss ich, Haskell nicht mehr zu ignorieren.

Merkur hat viele Dinge, die ich in Prolog sehen wollte. Ich habe wirklich gute Erwartungen bezüglich der Möglichkeit, Regeln zu unterscheiden. Programme, die in Mercury geschrieben wurden, sollten den Compiler inspirieren, viele Optimierungen zu machen (ich schätze).

+4

Prolog ist faszinierend. Aber noch mehr, wie "einfach" ist es wirklich. – alex

2

Für das letzte Projekt in einem Programmiersprachenkurs, den ich nahm, mussten wir einen Prolog-Evaluator in Scheme mit Fortsetzungen und Makros einbetten. Das Endergebnis war, dass Sie Scheme- und Prolog-Code beliebig mischen und sogar beliebige in Scheme geschriebene Vergleichselemente an die Prolog-Engine übergeben konnten.

Es war eine sehr lehrreiche Übung. Die ersten 12 Codezeilen (and und or) benötigten wörtlich etwa 6 Stunden, um korrekt zu schreiben. Es war so ziemlich die Suchlogik, die sehr präzise mit Fortsetzungen geschrieben wurde. Der Rest folgte etwas leichter. Als ich dann den Vereinheitlichungsalgorithmus hinzugefügt habe, hat alles funktioniert.

4

Wenn ich versuchen würde, ein logikbasiertes System zu erweitern, würde ich Prolog Cafe wählen, da es klein, Open Source, standardkonform ist und einfach in Java-basierte Systeme integriert werden kann.

9

Twelf.

Es verallgemeinert Lambda-Prolog signifikant, und es ist ein logischer Rahmen und ein metalogischer Rahmen sowie eine logische Programmiersprache. Wenn Sie eine Sprache mit einem starken Fokus auf Logik und Berechnung benötigen, ist es das Beste, was ich kenne.

+1

Es gab seit 2013 keine Updates zu Twelf. Weißt du, ob es immer noch ein aktives Projekt ist? –