PROLOG

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

PROLOG
Hallo,

im Hinblick auf die Klausur hab ich mir mal das Kapitel über Prolog angetan. :kotz:
Nur was hat dieses Kapitel überhaupt für einen Sinn und um was geht es da eigentlich?

Ich hab nur mitbekommen, das ständig irgendwelche Großeltern und Schwestern gesucht werden und das ein gewisser HORN scheinbar seine Klauseln beigesteuert hat.

Kann evtl. irgendjemand kurz zusammenfassen, um was es da geht und was das überhaupt soll?

Besten Dank im Voraus

Void


Ah was, des kommt scho net dran:freak::grazy:


seh ich / hoff ich genauso.


mut zur lücke


Prolog ist eine deskriptive Programmiersprache.
Du gibst also dem Interpreter einige Daten und Klauseln vor und er versucht dann mittels Becktracking ne geeignete Lösung zu finden. Das ganze ist eigentlich recht cool um Rätsel zu Lösen oder ne kleine KI zu programmieren. Hatte Prolog mal nen halbes Jahr in der Schule. Naja aber es kommt mit ziemlicher Sicherheit nicht in der Prüfung dran. Ich denke das Kapitel soll nur die Logic Programmierung vorstellen.

Mfg Majeeks


wobei ich noch immer finde, dass sowas weitaus cooler waere als Korrektheitsbeweise. Ausserdem fand ich, haette die vorlesung ruhig etwas naeher auf Prolog eingehen koennen, weil s im grossen und ganzen ne wirklich nette sache ist (ganz im gegensatz zum hocheffizienten scheme, auch wenn es nur zur konzeptvermittlung dient, so gehoert es trozdem abgeschafft!!!) :wand: :kotz: :wand: :kotz: :#: :grr:


es gibt gerüchte das unser folge jahrgang kein scheme mehr haben wird …


aaaaaaahhhhhhhhhhhhrrrrrrrrrrrgggggggg !!! wieso immer “die nach uns” wieso kansn es nicht EIN mal heissen “wir” :#: :#: :#: >>>:-(


also erstens heisst es bei EINER sache schon mal WIR: wir sind der erste Jahrgang, der seine Vordiplomsprüfungen nach jedem Semester einzeln schreibt und nicht nach jedem Jahr über 2 Semster Stoff. Das is schon ne große Verbesserung.

Und ausserdem - für jemanden wie mich der noch mit keiner anderen Programmiersprache in Berührung kam is Scheme ein wirklich guter Einstieg gewesen. Auch wenn man mit der Sprache vielleicht später nix mehr anfangen kann-ihr tut ja gearde so als wäre Scheme völlig nutzlos und schwachsinnig. Wer mit aktuellen tollen languages programmieren will soll halt an die FH gehn…


darum gehts net. es geht eigentlich nur daurm, dass die konzepte die wir lernen sollen mit scheme nur schwer umzusetzen sind. es mag sein dass es ein guter einstieg ist, weil du nix aussenrum programmieren musst, aber fuer objekt-orientierung zum beispiel, ist es absolut wenig geeignet. Das wirst bei naeherer beschaeftigung mit objektorientierten Programmiersprachen feststellen. Ich hab z.B mit Pascal angefangen, da hast du zwar ein bischen overhead, aber die sprache kann effizient verwendet werden und braucht auch wenig Vorkenntnisse. Aber egal, geschmackssache sag ich. Eins is auf jeden fall sicher: Von Perl kriegt mich keiner mehr los


elemetare algoritmik ist mit scheme schon ne feine sache , aber ist java dazu nicht genauso fähig ? ich meine wenn sogar die maschienenbauer ohne scheme und mit java ihren einstieg finden … hmm vielleicht ist das auch so eine “latein oder französisch” frage … naja …

p.s. wir werden uns später (hauptstudium) an die “FH’ler” anpassen müssen wenn du nicht grad in die forschung gehen möchtest, da die einfach praxisorientierter sind.
Dipl. mit oder ohne fh ist deinem arbeitsgeber sofern er nicht der staat ist völlig egal … er schaut nur auf leistung … aber wir geniessen ja zum glück ‘noch’ den ruf koplettere informatiker zu sein.


also ich weiß ja nicht, ob unsere scheme-kenntnisse für spätere programmier-aufgaben in anderen sprachen so von nutzen sind… ich denk da an diese ganze geschichte ums umgebungsmodell, funktionen als daten (lambda) und alles was damit zu tun hat… sowie diese spezielle implementierung der sog. restrekursion. sowas gibt es in keiner anderen sprache… naja, kann ich net sagen, aber zumindest nicht in java, c, pascal, basic, php und allen bekannten derivaten.

aber stimmt es, dass man in perl auch diese scheme-(un)art von “funktionaler programmierung” (damit muss unser üb-leiter dieses “funktionen als variablen” gemeint haben) machen kann?? ich weiß es nicht, weiß nur, dass in php diese $-zeichen vor variablen von perl kommen. is lästig die ganze zeit :wink:


nicht böse sein:

unter java nennt sich das „while“ :lachen:

Ich glaube funktionale Programmierung beschreibt eher eine Ideologie als die Frage, was eine Funktion nun genau ist


ich glaub du hast mich a bissl falsch verstanden. mir ist durchaus bewusst, dass es (dann aber auch in jeder der o.g. sprachen) ein while-konstrukt für iterative abläufe gibt.
ich meinte allerdings schon diese “spezielle implementierung” des ganzen, also dass du eine iteration basteln kannst, die eigentlich wie eine rekursion aussieht. das ist ja eine der besonderheiten von scheme.
wenn du jetzt hergehst, und als letzten aufruf deiner funktion in nicht-scheme die funktion selbst nochmal aufrufst, wird der compiler/interpreter das trotzdem rekursiv verarbeiten, also mit mehr speicherverbrauch. das ist allerdings kein problem, da man in nicht-scheme dann einfach viel öfter zu dieser art schleifen greift, statt gleich ne rekursion zu bauen.


Naja, was ich damit sagen wollte ist, dass es bei den anderen sprachen ein spezielles Konstrukt gibt, dass diese Transformation überflüssig macht. AFAIK wurde bei Scheme die Transformation Rekursion->Iterativer Prozess doch nur gemacht, weil man so sehr in die Idee der Rekursion vernarrt war. Und wenn ich es recht verstanden habe, dass die Transformation über call/cc abläuft, dann möchte ich ja mal ganz stark bezweifeln, dass die performanz der einer while-schleife entspricht.


@Yves : Funktionale Programmierung geht in jeder programmiersprache die nicht grad logikorientiert ist (wobei DAS ja nur erst mal eine sonderform der funktionalen programmierung waere , eben beschraenkt auf boolsche funktionen), also auch in perl. Das mit den $ kommt wirklich aus Perl und bezeichnet dort ein sogenanntes “Skalar” … das is dann in Perl so ziemlich alles was ne Zahl oder nen Buchstaben darstellt oder Strings. Die dinger sind ziemlich praktisch weil die typunterscheidung automatisch durchgefuehrt wird. Auch ganz gut ist die Eigenschaft dass du im Grunde sehr abstrakt und doch so problemnah arbeitest, was du als phpler vielleicht schon mal so erlebt hast?


Wenn du willst, kannst du auch in C oder Pascal funktional programmieren, indem du Zeiger auf Funktionen benutzt.

Mail vom Johannes Handl
Hi Johannes,
was meintest du gleich nochmal mit “funktional programmieren”? Geht das in Perl auch so wie in Scheme, mit kompletten Funktionen als Variablen (à la lambda), samt ihrer Umgebung etc.? Oder meintest du nur, dass man halt Funktionen definieren und aufrufen kann? Das ist dann aber quasi Standard in höheren Programmiersprachen (z.B. in Assembler oder Cobol geht sowas ja nicht).

—Antwort:—

Hallo,

Funktionen bestehen in Perl aus Code + Umgebung!
Beispiel Bankkonto in Perl, amount soll privat sein (aus der global
Environment heraus nicht zugreifbar sein) funktioniert analog zu Scheme!

In dem Programm sind sicher ein paar Fehler, ich habe es

nicht getestet udn auch schon laenger nicht mehr Perl programmiert.

Im großen und ganzen sollte es aber stimmen

[code]#!/usr/bin/perl

use strict;

sub make_account{

# Die lokale Variable balance wird mit dem ersten Parameter
# initialisiert un ist nur innerhalb dieser Funktion zugreifbar
my $balance=shift;

# lokale Funktionen
my $deposit = sub{ ... };
my $withdraw = sub{ ... };
...

# Dispatcher wie in Scheme
my $dispatch = sub{
                        my $message=shift;
                        if($message eq "balance"){return $balance;}
                        elsif($message eq "deposit"){$deposit->($_[0]);}
                        elsif($message eq "withdraw"){$deposit->($_[0]);}
                        elsif....
                        else die "Make-Account -- Unknown request: $message";

};

Dispatcher wird zurueckgegeben

return $dispatch;
}

sub main{
my $konto = make_account(100);
$konto->(“balance”);
$konto->(“deposit”,100);
$konto->(“withjdraw”,100);
}

&main();[/code]

Unter funktionaler Programmierung ist gemeint, dass das gannze Programm eine
Funktion ist, und das Programm in dem Moment stoppt, wo ich einen Wert
berechnet habe.

Bei Anweisungsorientierten Programmiersprachen haben Programme den Typs:
Aw1;
Aw2;
Aw3;
Aw4;

Bei Funktionsorientierten Programmiersprachen haben Programme eher den Typs:
Aw1(Aw2(Aw3(…)));
Dies bedeutet naturelich auch, das Funktionen (normalerweise) etwas
sinnvolleres als unspecified zurueckgeben.

Das war jetzt natuerlich leicht vereinfacht :-).

Gruss, Johannes


Allerdings werden Objekte in Perl i.d.R. als Package implementiert, die alle Instanzvariablen in einem assoziativen Array speichert.