Prolog - die erste Liste ist die Teilliste der zweiten Liste?
Beispiel:
isin([1,2,3], [1,0,1,2,3,0])
ergibt true, da 123
ist in 101230
Schrieb ich den folgenden code:
isin([AH|AT],[AH|AT]).
isin([AH|AT],[BH|BT]):- AH = BH, isin(AT,BT),isin([AH|AT],BT).
scheint nicht zu arbeiten. Versuchen Sie nicht, alle eingebauten Funktionen und BTW, der Prolog hat ein eingebautes sublist(L1,L2)
Funktion.
Wie Schreibe ich eine Abfrage gegen eine built-in Funktion mit SWI-Prolog? Ich habe versucht, direkt zu schreiben
?- sublist([1],[2]).
aber es gibt mir underfined procedure
Fehler.
Ist es möglich zu sehen, wie eine eingebaute Funktion codiert ist? Wie?
- Versuchen Sie zu Fragen, eine Frage auf einmal bitte. Und warum sollten wir versuchen, Sie nicht zu verwenden, keine built-in Prädikate in deiner ersten Frage?
- Ich wollte nicht zu verschwenden, mehrere Beiträge für meine eigene Frage.
- bitte, tun Sie das. Das ist kein forum und jede Frage sollte nur das sein: eine Frage. Zum Beispiel, ist es sehr wahrscheinlich, dass verschiedene Menschen würde wollen eine Antwort auf verschiedene Teile Ihrer aktuellen Frage. Und vielleicht werden Sie nicht stören, wenn Sie nicht alle Antworten zu kennen.
- Ok, wenn das der bevorzugte Weg. Ich werde tun, wie du gesagt hast, in Zukunft post. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
sublist([1,2,3], [0,1,0,2,0,3,0]).
wahr ist.Wenn Sie möchten,
...um erfolgreich zu sein, aber
...zu scheitern, möchten Sie vielleicht zu prüfen,
Beachten Sie, dass wenn Sie übergeben Sie eine variable durch als Unterliste, backtracking wird Ihnen eine umfassende Sammlung aller möglichen Teillisten der Liste, aber dies wird im Allgemeinen beinhalten mehrere Wiederholungen des leeren Liste (da die leere Liste kann kombinieren mit allen anderen Teillisten beide vor und hinter Ihnen in eine append-operation).
Da es scheint zu sein, Hausaufgaben gebe ich Euch nur ein paar Hinweise:
Scheint es, fehlt der Fall, wo eine leere Liste ist eine Teilliste der anderen.
Du vermischt die beiden Fälle "die Unterliste beginnt hier" und "die Unterliste beginnt später" in einer Klausel.
Scheint es, die Elemente der Teilliste sollten konsekutiv in die größere Liste. Dafür brauchst du zwei Prädikate. Im wesentlichen haben Sie daran zu erinnern, dass die Unterliste begann, wenn Sie auseinander nehmen der Listen.
Es gibt kein eingebautes
sublist/2
nur einsublist/3
denen macht etwas anderes (filter-Liste mit einem Prädikat).weiteren Umsetzung durch die Mitglied ist :
Mitglied/2 gibt true zurück, wenn das element in einer Liste