Oberhalb der Rückkehr wahr, aber es gibt keine X
zurück. Warum?Abwicklungsliste in Prolog
Antwort
Was Sie haben, ist sehr nah, und ich denke, Sie sind nur in der Prolog verdreht. Sie müssen es nur logisch aufschlüsseln und dann auf den Prolog schauen. Richtig denken Sie in Bezug auf den Fall, ob das erste Element in der Liste selbst eine Liste ist. Schreiben Sie heraus, was die Regeln aussehen könnte:
- Wenn wir „entspannen“
[E|_]
undE
keine Liste ist, dann bekommen wirE
. - Wenn wir "
[E|_]
undE
10" eine Liste "abwickeln", dann wir (rekursiv) "E
" abwickeln, um das Ergebnis zu erhalten.
Welche aussehen würde:
unwind_head([E|_], E) :- \+ is_list(E).
unwind_head([E|_], F) :- is_list(E), unwind_head(E, F).
Sie können auch den Prolog verwenden "if-else" für dieses Konstrukt:
unwind_head([E|_], F) :-
( is_list(E)
-> unwind_head(E, F)
; F = E
).
Beachten Sie, dass wir nie, was den Schwanz von der Pflege Liste ist, so können wir _
verwenden.
Danke :). 1. Ist es möglich, den Suchbaum in Prolog zu drucken? 2. Ist es möglich, Schritt für Schritt zu debuggen? 3. Jeder kann ersetzt werden durch die Konstruktion beschrieben durch das erste Beispiel in Ihrer Antwort, bin ich richtig? – Gilgamesz
@Gilgamesz Sie können 'trace' verwenden, um Schritt für Schritt zu debuggen. Es wird jedoch keinen Suchbaum gedruckt. Sie müssen das mit der Hand machen. – lurker
- 1. Prolog Typ Definition in Swi-Prolog
- 2. Matrix-Multiplikation in Prolog
- 3. Breite-zuerst in Prolog
- 4. Baumvorbestellung Traversal in Prolog
- 5. Wie negieren in Prolog
- 6. Benutzereingabe in Prolog
- 7. Symboltabelle in Prolog
- 8. Schwache Regeln in Prolog
- 9. Prolog-Systeme in Javascript
- 10. Antworten zurück in Prolog
- 11. Zufällige Artikel in Prolog
- 12. Heuristische Algorithmen in Prolog
- 13. Aussagenlogik Teilformel in Prolog
- 14. Rätsel in Prolog
- 15. Was bedeutet # = in Prolog?
- 16. Rekursive Multiplikation in Prolog
- 17. Hallo Welt in Prolog
- 18. Geteiltes Wort in Prolog
- 19. Schalter Aussagen in Prolog
- 20. Prolog-Programmierung in Ubuntu
- 21. Grundfehler in Prolog
- 22. Typenkonflikt in Prolog-Code
- 23. Was bedeutet \ + in Prolog?
- 24. Syntaxfehler in Prolog
- 25. Rückgabewert in Prolog
- 26. Power-Funktion in Prolog
- 27. Saiten in Prolog manipulieren
- 28. U-Bahn in Prolog
- 29. Einfaches Quadratprogramm in Prolog
- 30. Prädikat kodieren in Prolog
Es vereinheitlicht 'X' nicht mit irgendetwas, weil Ihr zweites Argument zu' unwindHead' * singleton * ist (Sie haben die Warnmeldung gesehen, richtig?). Das bedeutet, dass Sie eine Variable haben, die Sie nur an einer Stelle verwenden und daher mit einem Wert kombiniert wird, der niemals verwendet wird, oder nie mit einem Wert vereinheitlicht wird. – lurker
ok, wie verbessert man das? Ich habe versucht, es auf der rechten Seite zu verwenden, aber das Ergebnis ist das gleiche :( – Gilgamesz
Ehrlich gesagt bin ich nicht genau sicher, was dieses Prädikat im Allgemeinen tun soll. – lurker