Prolog: 2 Fragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Prolog: 2 Fragen

    Hallo zusammen,

    ich bin Prolog-Anfänger und habe 2 Fragen:

    1) Ich habe eine Wissensbasis in einer Datei und möchte, dass beim Start dieser Datei mehrere Anfragen ausgeführt werden. Ist das möglich?
    Wissensbasis:

    Quellcode

    1. %Person Waldemar
    2. eigenschaft(waldemar,m).
    3. eigenschaft(waldemar,klein).
    4. eigenschaft(waldemar,braune_augen).
    5. eigenschaft(waldemar,braune_haare).
    6. eigenschaft(waldemar,sport).
    7. eigenschaft(waldemar,bier).
    8. %Person Heidi
    9. eigenschaft(heidi,w).
    10. eigenschaft(heidi,klein).
    11. eigenschaft(heidi,braune_augen).
    12. eigenschaft(heidi,braune_haare).
    13. eigenschaft(heidi,sport).
    14. eigenschaft(heidi,bier).
    15. %Person Lisa
    16. eigenschaft(lisa,w).
    17. eigenschaft(lisa,gross).
    18. eigenschaft(lisa,blaue_augen).
    19. eigenschaft(lisa,blonde_haare).
    20. %Person Gisela
    21. eigenschaft(gisela,w).
    22. eigenschaft(gisela,klein).
    23. eigenschaft(gisela,braune_augen).
    24. eigenschaft(gisela,rote_haare).
    25. eigenschaft(gisela,bier).
    Alles anzeigen


    Meine Anfrage:

    Quellcode

    1. eigenschaft(waldemar,klein).


    Frage 2:
    Für die obere Wissensbassis muss ich einen Regelkopf erstellen, der so aussieht:
    er_sucht_sie(Wunscheigenschaft1,Wunscheigenschaft2):-

    dieser soll eine Frau ausgeben, die die beiden Eigenschaften besitzt.
    Ich habe es so gelöst:

    Quellcode

    1. er_sucht_sie(Wunscheigenschaft1,Wunscheigenschaft2):-
    2. eigenschaft(X,w),
    3. eigenschaft(X,Wunscheigenschaft1),
    4. eigenschaft(X,Wunscheigenschaft2).


    allerdings wird nur 6x "true" ausgegeben. Wie kann ich den namen ausgeben lassen und wo ist der Fehler?

    Grüße
    Alex
  • 1. Frage:
    glaube eher nicht, da die konkreten Anfragen von den Regeln bzw. der Wissensbasis immer getrennt sind. Zumindest weiß ich nicht wie es gehen sollte.

    2. Frage:
    Du muss natürlich auch den Ausgabeparameter X in der Regel mit übergeben:

    Quellcode

    1. er_sucht_sie(X,Wunscheigenschaft1,Wunscheigenschaft2):-
    2. eigenschaft(X,w),
    3. eigenschaft(X,Wunscheigenschaft1),
    4. eigenschaft(X,Wunscheigenschaft2).

    Die Anfrage sollte dann z.B. so aussehen:

    Quellcode

    1. er_sucht_sie(Frau,klein,braune_augen).

    Frau ist eine Variable, da sie mit einem Großbuchstaben beginnt.
    Nun sollten dir alle möglichen Frauen ausgegeben werden.
  • Also bei mir geht es:
    Welcome to SWI-Prolog (Multi-threaded, Version 5.6.47)
    Copyright (c) 1990-2007 University of Amsterdam.
    SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to redistribute it under certain conditions.
    Please visit swi-prolog.org for details.

    For help, use ?- help(Topic). or ?- apropos(Word).

    ?- [test].
    % test compiled 0.00 sec, 100 bytes

    Yes
    ?- er_sucht_sie(Frau,klein,braune_augen).

    Frau = heidi

    Yes
    ?- er_sucht_sie(Frau,bier,sport).

    Frau = heidi

    Yes
    ?-

    und hier meine test.pl:

    Quellcode

    1. %Person Waldemar
    2. eigenschaft(waldemar,m).
    3. eigenschaft(waldemar,klein).
    4. eigenschaft(waldemar,braune_augen).
    5. eigenschaft(waldemar,braune_haare).
    6. eigenschaft(waldemar,sport).
    7. eigenschaft(waldemar,bier).
    8. %Person Heidi
    9. eigenschaft(heidi,w).
    10. eigenschaft(heidi,klein).
    11. eigenschaft(heidi,braune_augen).
    12. eigenschaft(heidi,braune_haare).
    13. eigenschaft(heidi,sport).
    14. eigenschaft(heidi,bier).
    15. %Person Lisa
    16. eigenschaft(lisa,w).
    17. eigenschaft(lisa,gross).
    18. eigenschaft(lisa,blaue_augen).
    19. eigenschaft(lisa,blonde_haare).
    20. %Person Gisela
    21. eigenschaft(gisela,w).
    22. eigenschaft(gisela,klein).
    23. eigenschaft(gisela,braune_augen).
    24. eigenschaft(gisela,rote_haare).
    25. eigenschaft(gisela,bier).
    26. er_sucht_sie(X,Wunscheigenschaft1,Wunscheigenschaft2):-
    27. eigenschaft(X,w),
    28. eigenschaft(X,Wunscheigenschaft1),
    29. eigenschaft(X,Wunscheigenschaft2).
    Alles anzeigen