Programmierung mit Prolog lernen

...komplette Frage anzeigen

4 Antworten

Ich will mich jetzt nicht subjektiv auf die Einfachheit von Prolog beziehen, sondern lieber Fakten vorlegen: Prolog oder allgemein die logische Programmierung ist ein interessantes Konzept, allerdings eher was für Akademiker. Nicht, weil man damit nichts machen könnte, es ist nur eben für allgemeine Programmieraufgaben ungeeignet und entstammt eher theoretischen Überlegungen. Wenn du dich mit so was abstraktem beschäftigen willst, gerne, wenn du dir aber wirklich die Hände schmutzig machen willst und was "richtiges" programmieren willst, ist eine Sprache wie C deutlich geeigneter.

Noch eine kleine Anmerkung: Tatsächlich kann man mit Prolog deutlich weniger machen als mit einer "normalen" Sprache wie C, da man für ein komplett anderes Programmierparadigma schwieriger Bibliotheksanbindungen erstellen kann. Außerdem lohnt sich das nicht, weil nur sehr wenige Leute praktisch mit Prolog programmieren. Fürs praktische Programmieren solltest du dir eine der folgenden Sprachen aussuchen: C, C++, C#, Java.

Welche von den Programmiersprachen kannst du mir denn empfehlen? Also welche hat den größten Nutzen und die besten Möglichkeiten? C, C++ oder C#? Java lerne ich ja nächstes Jahr sowieso, es macht also wenig Sinn, sich jetzt schon damit zu befassen.

0
@antarispro

Die Frage ist so nicht zu beantworten. Was soll "größter Nutzen" und "beste Möglichkeiten" bedeuten? Gute Job-Chancen? Gute Grundlagen zum Lernen weiterer Sprachen? Gute Portierbarkeit auf verschiedenste Plattformen? Schnelle Erfolgserlebnisse?

So etwas wie "die beste Sprache" gibt es genauso wenig wie "das beste Werkzeug", denn Sprachen sind genau das: Werkzeuge. Hat ein Hammer einen größeren Nutzen als eine Zange? Bietet ein Schraubenzieher mehr Möglichkeiten oder ein Teppichmesser?

C ist eine sehr hardwarenahe Sprache, mit der sich effizienter und ausgezeichnet portierbarer Code schreiben lässt, dafür ist sie aber in vielen Bereichen sehr low-level und erfordert selbst für simple Aufgaben oft erheblichen Aufwand. Unter Linux und Unix ist sie aber allen Unkenrufen zum Trotz noch immer Haus- und Hofsprache. Außerdem lernst du da gleich richtig, wie man sorgfältig programmiert, und du lernst vieles von dem zu verstehen, was "hinter den Kulissen" anderer Sprachen passiert.

C++ bietet dir nahezu alle Vorteile und Eigenschaften von C, zusätzlich aber noch eine etwas höhere Abstraktionsebene und eine umfangreichere und bequemere Standardbibliothek. C++ ist auf Grund der vielen unterstützten Paradigmen und Techniken bei gleichzeitiger Wahrung der low-level-Anteile von C eine der komplexesten Sprachen überhaupt, und es dauert viele Jahre, bis du einigermaßen effizient und sicher mit der Sprache umgehen kannst. Dafür gehört sie aber immer noch zu den verbreitetsten Sprachen.

C# ist im Gegensatz zu C und C++ wesentlich leichter zu erlernen und hat einen reinen high-level-Ansatz. Mit dieser Sprache kommst du unter Umständen schneller zu Erfolgserlebnissen und kannst viel früher mit GUI-Programmierung anfangen. Dafür bist du andererseits aber ziemlich festgelegt auf Windows-Programmierung. Zwar gibt es freie Implementierungen auch für Linux / Unix, aber das ist eher ein Workaround, so, als würdest du einem Schlauchboot Räder anschrauben, damit du auch an Land damit fahren kannst, statt gleich ein Auto zu nehmen.

2

Ich hab mir mal ein bisschen was dazu durchgelesen und ich muss sagen, ja ist was für Anfänger, jedoch würde ich dir empfehlen mit Java anzufangen.Ist weitverbreitet und noch sehr einfach.Zusätzlich gibt es auch noch haufenweise Bücher, sogar kostenlose und gute(Google nach "Java Openbook - Galileo Computing").Mit Java bist du auch schon gut dabei, würde dir also eher das raten zu erlernen.Kannst auch grafisches damit machen!

WIe ich deinem Vorredner schon geschrieben habe, werde ich im nächsten Schuljahr Java behandeln und wollte mich deshalb privat mit Prolog auseinandersetzen.

Von den Galileo Computing Büchern habe ich auch schon gehört. Die sollen recht gut sein... Habe von denen jedoch leider keins gefunden, dass sich mit Prolog auseinandersetzt. Sonst würde ich die nutzen^^

0

Bist du noch Schüler?

Die logische Programmierung ist schon ein ganz eigenes Konzept. Wen es interessiert, der kann sich ja gern mal damit auseinandersetzen und dann eben auch am besten zum Einsteigen mit Prolog. Wir haben das im Studium gemacht und das war schon ganz schön knifflig (hatte einen 1er-Schnitt).

Wenn du aber eher programmieren lernen willst wie du es später im Berufsleben am ehesten brauchen kannst, wendest du dich besser der objektorientierten Programmierung zu, zum Beispiel mit C++, Java oder C#. Wüsste jetzt nicht, wo dir Prolog wirklich etwas nützen würde.

Ja, ich bin noch Schüler^^ 12. Klasse Nächstes Schuljahr, wenn ich 13. bin, werden wir in der Schule Java behandeln... Ist ja objektorientiert

Mein Lehrer sagte mir noch, dass es Schüler, die in der Schule nur objektorientiert programmiert haben, später schwerer haben werden, da sie dann noch nie von logischer Programmierung gehört haben.

0
@antarispro

Ich stehe jetzt schon seit über 5 Jahren als Softwareentwickler und IT-Berater im Beruf, hab noch nie Prolog gebraucht oder eine andere logische Programmiersprache. Die logische Programmierung hat schon ihre Anwendungsgebiete (hier kannst du nachlesen welche: http://de.wikipedia.org/wiki/Logische_Programmierung). Aber ich finde, dass es gerade für einen Anfänger/Schüler nicht unbedingt einleuchtend ist. Warte damit lieber bis zum Informatikstudium :-)

Du kannst dich neben Java, C++, C# auch noch mit Sprachen wie PHP, JavaScript, Python, Ruby beschäftigen.

1

1) Finde ich nicht. Gerade wenn man aus dem Bereich der iterativen Programmiersprachen kommt, dann ist ein Umstieg auf Prolog schon recht schwierig. Prolog ist halt eine logische Prog-Sprache.

2) Eine Lektüre kann ich dir jetzt nicht empfehlen. Ich hatte die Sprache auch nur sehr kurz gehabt und die Befehlsliste (wenn man das so nennen kann) ist ja schnell gelernt. Soviel gibt es da ja nicht.

Ich kann dir aber mal ein kleines Programmbeispiel zeigen:

parent(pam,bob).
parent(tom,bob).
parent(tom,liz).
parent(bob,ann).
parent(bob,pat).
parent(pat,jim).
parent(pam,liz).
parent(tom,ruth).
happy(X) :-
        parent(X,_).
grandparent(X,Y) :-
        parent(X,Z),
        parent(Z,Y).
%recursion
predecessor(X,Y) :-
        predecessor(Z,Y),
        parent(X,Z)
        .
predecessor(X,Y) :-
        parent(X,Y).

sibling(X,Y) :-
        parent(Z,X),
        parent(Z,Y),
        parent(S,X),
        parent(S,Y),
        X\==Y,
        S\==Z.

So.....wenn du jetzt in der Befehlsliste fragst ob "ann" die Grußmutter von "pam" ist, sollte "true" herrauskommen:

Du müsstest dann einfach folgendes Fragen: grandparent(pam, ann).

Setz dich mal ein wenig damit auseinander. Das ist ein wenig schwer zu programmieren (dieses Beispiel ist ja noch einfach). Es gibt aber auch schwierigere Probleme: Z.B. ein Lösungsweg finden um mit einem 5Liter und einem 3Liter Kanister in einem der Beiden Kanister 4Liter zu füllen.

Es ist halt alles ein wenig anders.

Wegen der Lektüre: Such nochmal ein wenig bei Google. Irgendwo findest du schon eine Anweisungsliste. So viele sind es ja nicht.

Ich hoffe ich konnte dir helfen.

Vielen Dank schonmal!

Ich werde mich dann bei Gelegenheit (leider nicht mehr heute) damit auseinandersetzen.

Gut, wenn das nicht soviel ist, dann kann ich ja doch die paar Beispiele, die mir Google ausgespuckt hat, nutzen. Ich dachte, das wäre viel mehr, was man da wissne muss^^

0

Was möchtest Du wissen?