NPS



  • Hallo zusammen, ein Frage, wollt Ihr etwas über mein Projekt, NPS ( Natürliche Programmier-Sprache ) lesen ? Ich habe das Thema hier schon einmal besprochen. Ich würde ungefähr 20 Zeilen von einem Beispiel-Quelltext vorstellen.



  • Hi @biter ,
    warum nicht?



  • Also folgender Text in NPS:

    Sei Auto ein ObjektTyp. // Umgangssprachlich, kein OOP
    Sei Lenkrad ein ObjektTyp.
    Sei Sitz ein ObjektTyp.
    Sei Farbe eine Eigenschaft.
    Farbe kann sein: schwarz, grau, gelb.
    Jedes Lenkrad hat eine Farbe.
    Jeder Sitz hat eine Farbe.
    Jedes Auto hat ein Lenkrad.
    Jedes Auto hat ein Sitz. // mindestens einer

    Sei Autos ein ObjektTyp, Plural von Auto.
    Seien MeineAutos Autos.

    Sei Auto1 ein Auto mit schwarzem Lenkrad.
    Sei Auto2 ein Auto mit grauem Lenkrad.
    Sei Auto3 ein Auto mir gelbem Lenkrad.

    Füge Auto1, Auto2 und Auto3 zu MeineAutos hinzu.
    // Und jetzt wird's interessant:
    Alle Sitze von MeineAutos haben die selbe Farbe wie deren Lenkräder.

    Dieser Satz ist keine Anweisung, sondern eine Datenbeschreibung, wird aber vom Compiler in eine Anweisung übersetzt. zB: als C# Code

    foreach(Auto auto in MeineAutos)
          auto.Sitz.Farbe = auto.Lenkrad.Farbe;
    

    Es soll ähnlich wie bei der Sprache Prolog sein, dort gibt man keine Anweisungen ein, sondern beschreibt nur die logische Struktur, die Berechnung macht das Prolog-System. Damit kann man auf Iterationen wie bei C#, while, for verzichten, man beschreibt einfach nur die Zusammenhänge der Daten. Dieses NPS soll eine Programmiersprache werden, die alles können muss wie etwa C#. Natürlich geht es nicht darum die Schlüsselworte von C# in andere zu übersetzen, damit wäre nichts gewonnen. So eine Sprache hätte den Vorteil, dass man sie leicht erlernen kann und besser lesen kann, was auch zu weniger feflerhaften Codes führen würde. Der Nachteil, der Code ist um einiges länger.


  • Mod

    Hast du schon einmal eine funktionale Programmiersprache gesehen?



  • Ja ich habe sogar eine definiert, und implementiert, mit Namen GeoLisp2. NPS ist was anderes. Da muss man die Schlüsselworte von Lisp lernen, Iteration, Rekursion ... Das ist auch bei Common-Lisp so. Bei NPS drückt man sich in einer Teilmenge einer natürlichen Sprache aus. NPS ist aber bei weitem noch nicht fertig, ich lade Euch ein daran mitzuarbeiten. Will mich selber nicht loben, dieses GeoLisp2 hat bei den Fehlermeldungen und bei der Dokumentation noch Mängel und kann deshalb noch nicht veröffentlicht werden. Sonst kann ich es gut gebrauchen, für meine Zwecke für Programmtransformation.



  • @biter sagte in NPS:

    Da muss man die Schlüsselworte von Lisp lernen, Iteration, Rekursion ... Das ist auch bei Common-Lisp so. Bei NPS drückt man sich in einer Teilmenge einer natürlichen Sprache aus.

    Man muss bei deiner Variante genau so die "Teilmenge der natürlichen Sprache" lernen. Das mag etwas einfacher sein als wenn die Grammatik nicht so "natürlich" ist, aber lernen muss man es auch. Dafür bläht es die Programme extrem auf. Für erfahrene Programmierer ist das ein Nachteil.
    Einen Vorteil hat es mMn. nur wenn Leute das Programm lesen können sollen die keine Programmierer sind.



  • Hier noch was anderes, möchte keine zwei Threads parallel laufen lassen. Auf meinem Laptop unter Windows 11 kam mal wieder ein Update, jetzt kann ich mit Notepad keine .txt Dateien öffnen. Mit Wordpad kann man glaube ich auch unformatierten Text laden und speichern.



  • Guten Morgen@biter,
    das ist natürlich einen anderen Threads wert. Hat hier doch mit Deinem ursprünglich Anliegen so gar nichts zu tun.



  • @biter sagte in NPS:

    Ja ich habe sogar eine definiert, und implementiert, mit Namen GeoLisp2. NPS ist was anderes. Da muss man die Schlüsselworte von Lisp lernen, Iteration, Rekursion ...

    Naja, LISP ist eine etwas andere Denkweise als C++ und diese muss man kennen.

    Ich erinnere da an die Schlüsselwörter mapcar oder auch an die Funktionskaskaden ala

    (defun c:somefunc  (/ ent etdata lst)  
      (if (setq ent (car (entsel "\nSelect block: ")))  
        (while (/= "SEQEND" (cdr (assoc 0 (setq etdata (entget (setq ent (entnext ent)))))))  
        (setq lst (cons (cdr (assoc 1 etdata)) lst))))  
      (vl-string-right-trim " " (apply 'strcat (mapcar '(lambda (x) (strcat x " ")) lst))))
    


  • Und wie so ein Lisp-Text aussieht, bei GeoLisp2 habe ich bei der Syntax zwei Klammerarten, wegen der besseren Lesbarkeit. Vielleicht kann man bei Lisp-IDE's die Klammern einfärben, dann sage ich nichts. Auch bei Lisp sind die Quelltexte etwa 3-4 mal so lang wie bei C++. Also einen größeren Lisp-Text zu lesen ? Da wäre NPS ganz anders. Und die Schlüsselworte von NPS lernt man in der Grundschule ( nichts für ungut ).

    Hier bei GeoLisp2, zwei Klammerarten, leicht lesbar:

    <DEFUN Summe <L> <IF <NULL? L> 0 { + <CAR L> <Summe <CDR L>> } >>;


Anmelden zum Antworten