Wie kann ich die Berechnung der Länge einer Liste
?- size_sub([[b,a,g], [9,3,7,4], [6]], X).
X = [3, 4, 1].
?- size_sub([[c,g,e,w], [7]], X).
X = [4, 1].
?- size_sub([], X).
X = [].
ist, die Letzte richtige? konsequent zu sein, wäre das nicht size_sub([[]],X).
oder size_sub([],X)
wäre die Antwort []
InformationsquelleAutor Mary | 2011-09-15
Map
length/2
über eine Liste von Listen, wir können mit dem meta-Prädikatmaplist/3
wie diese:InformationsquelleAutor Thanos Tintinidis
Ok, Sie brauchen, um zu starten mit dem Basis-Fall, der die Letzte Antwort
so
size_sub([],X).
ist wahr, wennX=[]
also zuerst schreibst du, dass es in der Regel.Dann müssen Sie die induktive Schritt eine Liste, die eine mehr als die Vorherige. Ich gehe davon aus, dass Sie eine Größe haben/2 die Funktion für die Bestimmung der Größe einer einzelnen Liste (wenn nicht bitte kommentieren).
Also der induktive Schritt ist zu gehen, um den Betrieb auf die Länge des ersten Parameters, so N->N+1. Wir vertreten würde dies durch striping aus dem Kopf der Liste syntax
[H|T]
nun der zweite parameter (Ihre Antwort) ist die Länge von H mit dem Ergebnis des Aufrufs size_sub auf T., Da wir nicht bestimmen, Regeln die Parameter in der Kopfzeile verwenden wir N darstellen, die Länge von H und T2 repräsentieren das Ergebnis der size_sub auf T.Also der erste Teil der Regel wird
size_sub([H|T],[N|T2]):-
nun Folgen wir es mit dem Prädikate, assert die Werte für N und T2.
setzen, dass alles zusammen erhalten Sie
Größe/2 ist eine weit einfachere Fall und nach dem gleichen Prozess der base + induktiver Sie sollten in der Lage sein, erstellen Sie die Regeln für. Bitte Kommentar, wenn Sie weitere Hilfe benötigen.
** EDIT - Request für die Größe/2 definition **
Definieren Größe/2
Starten mit dem Basis-Fall, die leere Liste hat eine Größe von 0.
Nun der induktive Schritt. Die Größe der Liste der Länge(N+1) ist die Größe einer Liste der Länge(N). So können definieren unsere Liste als
[_|T]
ich definiert habe in der Liste mithilfe der _ zur Vertretung der Kopf, weil wir es nie benutzen, so können wir nur die anonyme variable. Ermöglicht die Verwendung von N darstellen, die Länge von T, und M für N+1.so
Größe([_|T],M):-
können nun definieren N
und schließlich behaupten, dass M gleich N + 1
so setzen Sie alles zusammen
Antwort aktualisiert
InformationsquelleAutor Bob Vale