Prolog: Ist Element in Liste enthalten



  • hi,

    ich versuch grad ein programm zu schreiben das mir sagt ob ein elemetn in einer lite enthalten ist. (ich wies, da gibts was eingebautes, das will ich aber ncht benutzen, ist nur zu übungszwecken).

    equal(Y,Y). 
    equal(X,Y):- X \= Y.
    occur([X|Xs],Y):-equal(X,Y), occur(Xs,Y).
    occur([], _).
    

    Das ist mein Versuch, das Problem ist, durch das zweite Prädikat erzeuge ich eine immer wahre aussage, da der wert entweder dem vergleichswert entspricht oder nicht. lass ich das zweite prädikat weg, verursache ich einn fehlschalg.

    was muss ich machen damit das funktiniert. ich raff das net.



  • Dein equal ist überflüssig. Aber überleg dir dennoch einfach mal, wieso es nicht klappt. Dein equal ist immer true. Warum sollte occur also jemals false sein?
    Streich equal und überleg dir für occur alle Fälle, die beachtet werden müssen:
    - das aktuelle Element ist das gesuchte Element
    - das aktuelle Element ist nicht das gesuchte Element (das gesuchte kann aber noch weiter hinten in der Liste kommen!)
    Und schreib einfach für jeden dieser Fälle eine occur-Regel.


Anmelden zum Antworten