FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Prolog -> Listen definieren???

Prolog -> Listen definieren??? 2002-01-01 18:40
Popcorn
Wie stelle ich es eigentlich geschickt an, mir eine Liste ohne weitere Prädikate vorzudefinieren? Ich beziehe mich da auf
die Probeklausur, Aufgabe 5. Dort wird eine Liste vorgegeben. Ich möchte nun gerne meine Prädikate für die folgenden Aufgaben
testen, kann dieses ohne die Liste allerdings nicht.

Ich habe es bereits mit den folgenden Möglichkeiten ausgetestet:

Liste = [[a],[d],[f]].
Liste is [[a],[e],[f]].
=(Liste,[[a],[g],[v]]).

*Grübel*


Re: Prolog -> Listen definieren??? 2002-01-02 12:11
Popcorn
Hmm. Okay. Irgendwie war die Frage auch ein bißchen blöd oder besser gesagt, eine Antwort wie ich sie gerne gehabt hätte,
ist glaueb ich gar nicht möglich.
Also mache ich es nun so:

:- dynamic kennzeichen/1.
kennzeichen([hh-gu12-67, 1992]).
kennzeichen([hh-wa34-25, 1987]).
kennzeichen([hh-ig84-62, 1998]).
kennzeichen([hh-ba39-29, 1983]).

?- findall(Daten,kennzeichen(Daten),Bestandliste).

Daten = _G419
Bestandliste = [[hh-gu12-67, 1992], [hh-wa34-25, 1987], [hh-ig84-62, 1998], [hh-ba39-29, 1983]]

Re: Prolog -> Listen definieren??? 2002-01-02 12:23
Zaphod
Aber ist das denn richtig? Ich meine…diese Abfrage liefert dir zwar ein richtiges Ergebnis, aber das gilt doch nur innerhalb
der Klausel, sodass du dann in jeder Abfrage "findall(Daten,kennzeichen(Daten),Bestandliste)," reinschreiben musst,
sofern du die Liste verwenden willst, oder? Wenn ich da keinen Denkfehler gemacht habe, könntest du dir den Aufwand auch
sparen und lieber die Liste in ihrer reinen Form verwenden…

Re: Prolog -> Listen definieren??? 2002-01-02 12:25
Popcorn
Und worauf sollte ich dann z.B. das findall in 5(b) beziehen, wenn das Ding keinen Namen hat?

Re: Prolog -> Listen definieren??? 2002-01-02 12:31
Zaphod
hab 5(b) gerade nicht vorliegen, aber was noch viel schlimmer ist: Auf meinem Rechner klappen die Klauseln
Liste = [[a],[d],[f]].
Liste is [[a],[e],[f]].
=(Liste,[[a],[g],[v]]).
einwandfrei. Nun verrat mir mal, warum das auf deinem Rechner gestern nicht ging? Vielleicht verwendest du einen anderen
Prolog-Dialekt als ich?

Re: Prolog -> Listen definieren??? 2002-01-02 12:34
Popcorn
ARGH, *Schrei*

SWI. Welchen Du? Gna, gna, gna. Ich hol gleich die Benelli raus.

Re: Prolog -> Listen definieren??? 2002-01-02 12:40
Zaphod
hm…ich auch…
irgendwo muss man ja privilegiert sein ;-)

Re: Prolog -> Listen definieren??? 2002-01-02 14:34
Popcorn
Das fällt mir jetzt erst auf: Wir reden hier beide von definieren, ja? In den Prompt kann ich bis auf die mittlere Variante
ebenfalls alles eingeben. Nicht funktioniert es aber, wenn ich versuche, so eine Datenbasis zu erzeugen.

Re: Prolog -> Listen definieren??? 2002-01-03 12:35
100000rosen
Man kann die Liste rekursiv definieren:

liste([]).
% die leere Liste ist eine Liste

liste([Element|Listenrest]) :- liste([Rest]).
% nichtleere Listen bestehen aus einem Element
% und einer Liste als Rest

das entspricht auch dem vordefinierten Praedikat
is_list/1, soweit ich weiss.

Habe ich Dich falsch verstanden?

Re: Prolog -> Listen definieren??? 2002-01-03 13:37
Popcorn
Nein, nicht wirklich. Im Nachhinein sehe ich nur, wie dumm meine Frage eigentlich war. So wäre ich nämlich niemals dahingekommen,
wo ich hinwollte, da ich die Liste ja in einer Variable will. Aber das hat sich nun auch erledigt. Trotzdem thx.

Re: Prolog -> Listen definieren??? 2002-01-04 15:22
Anonymer User
Das is doch zum Durchdrehen! Man muss doch ne Liste im Voraus definieren können auf die man sich beziehen kann, sonst wird das doch nix. Ohne eine Liste in der alle Elemente drin sind kann ich doch nich prüfen wie viele das sind? Und wie definiere ich diese Liste denn nun???

Re: Prolog -> Listen definieren??? 2002-01-04 15:46
P0rnopeters
Liste=[a,b,c].

ist doch vollkommen ausreichend, wo liegt das problem?!?

Re: Prolog -> Listen definieren??? 2002-01-04 15:47
Popcorn
Mädel, guck Dir mal meine Musterlösung zur Probeklausur und der Aufgabe 5 an. Da siehst Du das. Ist auch in dieser Area. [img]http://images.rapidforum.com/images/i23.gif[/img]

Nachtrag: Wo ich gerade den Eintrag über diesem Posting sehe (gleichzeitiges Posten…), so geht es natürlich nicht zu Testen! Es muss ja in der selben Klausel stehen. Wie gesagt, wirf einfach mal einen Blick auf mein Topic zur Probeklausur. Ist einfach.

Re: Prolog -> Listen definieren??? 2002-01-04 22:57
Anonymer User
du meinst das mit dem ":- dynamic" und so weiter? Das kann doch nicht die einfachste Lösung sein, da musst du ja vor jeden Aufruf dieses blöde findall prädikat setzen, das ist doch nicht der weisheit letzter schluss oder?

Re: Prolog -> Listen definieren??? 2002-01-04 23:17
Popcorn
Ne, habe ich ja auch geschrieben. Man kann sich dass schenken und für die Liste auch die tatsächliche Liste eingeben. Habe ich glaube ich auch irgendwo als Beispiel gemacht.

Re: Prolog -> Listen definieren??? 2002-01-05 22:31
Anonymer User
Will nur noch mal drauf hinweisen dass das alles unfug ist. wenn man alle diese definitionen ausprobiert bekommt man:

1. Fehlermeldungen wegen syntax etc.

und/oder

2. Warnungen wegen isolierten Variablendefinitionen oder so was

und/oder

3. und schlimmstens falsche ergebnisse! wenn ich eine der definitionen nehme die KEINE fehler verursachen dann bekomme ich z.B. bei "length(Liste, X)" nur ein "no" statt z.B. "X=5". wenn ich aber "length([a,b,c,d,e], X)." angebe, dann ist X=5, alles OK. Kann man Listen garnicht definieren oder wie??