Kann in Perl 6 Lisp "Sprache" implementiert werden?

7

Hier ist die Interpretation von Hello $world für jedes zitierende Symbol meine Sprache .

%Vor%

So ist Perl 6 mächtig genug, um in einer zukünftigen Sprache für etwas wie

existieren zu können %Vor%

Also, die Frage ist offensichtlich: can it be done in present specification (or even implementation) of Perl 6 ?

    
DinGODzilla 08.11.2011, 20:03
quelle

4 Antworten

15

Die Grammatik von Perl 6 ist nur eine in Perl 6 geschriebene Grammatik und sehr formbar (obwohl die aktuellen Implementierungen nicht alle der gegebenen Flexibilität entsprechen).

Was Sie also fragen, ist prinzipiell möglich, könnte aber mehr Pflege brauchen. Insbesondere sind runde Klammern perfekt gültige Perl 6-Syntax, und sogar (defun a b) analysiert als gültige Perl 6. So müssten Sie / wirklich / vorsichtig mit Disambiguierungsregeln sein, und es wäre eine riesige Dose Würmer.

>

Es ist wahrscheinlich sinnvoller, die Lisp-Syntax auf ein speziell abgegrenztes syntaktisches Konstrukt zu beschränken (wie lisp(...) oder q:lisp{...} ), obwohl ein gewisses Maß an Mischen wahrscheinlich realisierbar wäre.

Ich bin mir sicher, dass, sobald solche Features in einem Compiler verfügbar sind, wir eine ganze Reihe interessanter Experimente sehen werden und nur diese Experimente zeigen, welche Art von Sprachmischung machbar und nützlich ist.

    
moritz 08.11.2011, 20:43
quelle
7

[Ich habe die Frage verpasst, dass es sich um Perl6 und nicht um Perl5 handelt. Ich lasse meine Antwort trotzdem offen, da sie für einige von Interesse sein könnte.]

Ich verstehe, dass Scheme und Lisp verwandt sind. Wenn Sie stattdessen mit Schema einverstanden sind, können Sie mit Inline :: MzScheme Blöcke von Schema-Code in Perl erstellen .

Auch wenn Sie mit Schema nicht zufrieden sind, könnten Sie das Modul mit Sicherheit so anpassen, dass es Ihre Lieblings-Lisp-Engine ohne große Probleme verwendet.

Es ist nicht ganz das, was Sie beschrieben haben, aber wie moritz erklärte, ist das, was Sie beschrieben haben, unmöglich, weil es keine Möglichkeit gibt zu wissen, welche Teile des Codes als Perl-Code behandelt werden sollten und welche Teile als Lisp-Code behandelt werden sollten >

Auf der anderen Seite, durch die Verwendung von 5.14 Pluggable-Token-Handler (von Feature :: qw_comments qw zu überschreiben, sollte es relativ einfach sein, Folgendes zu tun:

%Vor%

(Beachten Sie den Zusatz von lisp zu Ihrem Code.)

    
ikegami 09.11.2011 00:54
quelle
3

Carl Masak hat kürzlich (Ende 2014) ipso, "Ein metacirculares Lisp in Perl 6" erstellt, das auf dem aktuellen Rakudo funktioniert.

Es wird Möglichkeiten geben, wie es mit P6 inline kombiniert werden kann; Bitte lesen Sie "Slangs", um mehr darüber zu erfahren, zB einen aktuellen Blogbeitrag über Makros / Slangs, der rekursives Inlining ermöglicht von beliebigen Sprachen .

    
raiph 29.11.2014 20:17
quelle
2

Soweit ich das sehen kann, erlaubt Perl6 mächtige, Lisp-ähnliche Makros. Z.B. Der Parser ist in der Sprache verfügbar. Dadurch können Sie jede Sprache als Subsprache von Perl und nicht nur als Interpreter implementieren.

In Ikegamis Beispiel führte er das Schlüsselwort lisp(xxx) ein und das wäre noch einfacher. Das Lispxxx könnte ein einzelnes Makro sein, das Lisp analysiert und in Perl6 übersetzt und das Ergebnis zurückgibt, und in diesem Beispiel ein kompiliertes natives Sub, das ein Argument verwendet. Obwohl ich denke, dass Sie tatsächlich die emacs Lisp-Funktionen implementieren müssen, die Sie auch verwenden. Eigentlich wäre es einfach, Perl6-Primitive mit Lisp-Syntax zu adressieren ... z. (+ a b c d) => {quasi + a b c d} , damit Ihre Lisp-Syntax die volle Leistungsfähigkeit von Perl6 hat.

Siehe Ссылка für eine Einführung in Perl6 und AST.

    
Sylwester 31.07.2012 12:27
quelle

Tags und Links