Prologfrage
-
Was ist da falsch:
ersetze([a,b,c,d,X|rest],[a,b,c,d,Y|rest],Z) :- Y is Z.
-
Da ist nichts falsch. Funktioniert doch einwandfrei:
?- ersetze([a,b,c,d,X|rest],[a,b,c,d,Y|rest],1). X = _G169 Y = 1 YesAber Gegenfrage, was um Himmelswillen soll das sein?
Willst du vielleicht sowas hier (aber ich kann anhand deines Codes auch nur raten):
ersetze([], [], _). ersetze([H|T], [Z|TT], Z) :- H = Z, ersetze(T, TT, Z). ersetze([H|T], [H|TT], Z) :- ersetze(T, TT, Z).wäre dann
?- ersetze([a,b,c,d], [a,b,c,d], d). Yes?- ersetze([a,b,c,d], Y, d). Y = [a, b, c, d] Yes?- ersetze([a,b,c,X], Y, d). X = d Y = [a, b, c, d] Yes?- ersetze([a,b,c,X], Y, Z), Z = d. X = d Y = [a, b, c, d] Z = d YesErnsthaft, was willst du?
-
bei mir (SWI) gehts nicht. ich will das 5te element einer liste durch Z ersetzen
-
Sag's doch gleich

Das ist relativ simpel:
ersetze5([A1, A2, A3, A4, _|T], [A1, A2, A3, A4, Z|T], Z).Welcome to SWI-Prolog (Multi-threaded, Version 5.2.13) Copyright (c) 1990-2003 University of Amsterdam. (...) ?- ersetze5([a,b,c,d,e,f,g,h], Y, 5). Y = [a, b, c, d, 5, f, g, h] Yes
-
Ach ja, fällt dir dein Fehler auf? Achte auf den "rest" bei dir

-
Muss rest groß geschrieben werdne?
Wofür ist eigentlich _?
-
Nur Großgeschriebens ist eine Variabel. Rest klein geschrieben ist ein fester Wert, ein Atom. Das '_' bedeutet lediglich "hier ist eine Variabel, die mich aber nicht interessiert". Du kannst stattdessen auch etwas beliebiges groß geschriebenes nehmen. Dann wird Prolog dich allerdings warnen, dass du eine Variabel verlangt hast, die du aber nie verwendest

Ach ja, das "is" ist natürlich auch noch ein Fehler. "is" wertet mathematische Ausdrücke aus. Deswegen wird es bei "deinem" SWI auch "nicht funktioniert" haben. Wetten du hast dein ursprüngliches Prädikat nicht mit "1" - wie ich in meinem Beispiel - sondern z.B. mit einem Buchstaben aufgerufen?

-
d.h. [a,]=[,] ist nicht dasselbe wie [a,X]=[,X]?
-
Probier sowas doch einfach aus:
?- [a,_] = [_,_]. Yes ?- [a,X] = [_,X]. X = _G160 YesWas sieht man? Den Unterschied natürlich

'' ist einfach irgendwas, aber nichts, mit dem man weiterarbeiten kann. 'X' dagegen ist eine benannte Variabel, deren Wert man über eben jenen Namen ansprechen kann.
Kurz '' ist für die Mülltonne, 'X' nicht.Wenn du mit einer Variabel arbeiten willst, gibst du ihr einen Namen. Interessiert dich aber nicht der Wert einer Variabel, sondern willst du nur, dass ein Wert vorhanden ist, verwendest du '_'.