2017-07-09 2 views
0

Ich erhalte eine bestimmte Liste mit findall, und möchte dann die Anzahl der Elemente darin zählen.Zählen Liste Größe von einem Fund nicht in Prolog

heißt

huntingbreeds(List) :- 
    findall(Breedname, breed(Breedname,_,hunting), List). 

Dies gibt eine Notwendigkeit Liste der Jagdhunde aus meiner Datenbank [beagle, basset].

Aber jetzt, wenn ich es versuchen zählen mein neues Prädikat mit:

list_length([] , 0). 
list_length([_|Xs] , L) :- 
     list_length(Xs,N) , 
     L is N+1 . 

mit meiner Anfrage - list_length (huntingbreeds (List), Graf).

Dies gibt nur false zurück.

Ich dachte, ich muss arg heißt

?- list_length(arg(1,huntingbreeds(List),L), Count). 

es verwenden kann, kehrt aber wieder falsch. Wer weiß, wie ich die Listengröße bekommen kann? Ich weiß, dass die Funktion list_length wie funktioniert, wenn ich es geben:

?- list_length([1,2,3], Count). 

I Count = 3.

bekomme aber einfach nicht wissen, wie es aus dem Suchergebnis meine Liste zu übergeben. Ich habe versucht, die vollständige findall Aussage anstelle der huntingbreeds(List) setzen, aber das tut immer noch nichts.

Antwort

1

Sie könnten versuchen:

huntingbreeds(List),list_length(List, Count). 
+0

Danke für die Anregung, aber ich muss, dass list_length Prädikat erstellen mit den zwei Argumente: list_length (List, count), aber Ihr Kommentar dazu beigetragen, wie ich es wie folgt erstellt: List_And_Count (L, Count): - Jagdbruten (L), Liste_Länge (L, Anzahl). – ildsarria

+0

Gut zu helfen !!! – coder