2017-07-09 3 views
0

J'obtiens une liste spécifique en utilisant findall, et je veux ensuite compter le nombre d'éléments qui s'y trouvent.Taille de la liste de comptage résultant d'un findall ne fonctionnant pas dans Prolog

à savoir

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

Cela renvoie une liste de besoins des chiens de chasse de ma base de données [beagle, basset].

Mais maintenant, si je tente compter à l'aide de mon nouveau prédicat:

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

avec ma requête - list_length (huntingbreeds (Liste), Count).

Cela retourne juste faux.

Je pensais que je peux avoir besoin d'utiliser arg dire

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

mais encore une fois il retourne faux. Quelqu'un sait comment je peux obtenir la taille de la liste? Je sais que la fonction list_length fonctionne comme si je lui donne:

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

Je reçois Count = 3.

Mais ne sais pas comment le transmettre ma liste à partir du résultat de recherche. J'ai essayé de mettre la déclaration complète findall à la place du huntingbreeds(List) mais cela ne fait toujours rien.

Répondre

1

Vous pouvez essayer:

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

Merci pour la suggestion, mais je dois créer ce prédicat list_length avec les 2 arguments: list_length (Liste, compter), mais votre commentaire aidé comme je l'ai créé comme ceci: List_And_Count (L, nombre): - huntingbreeds (L), list_length (L, Count). – ildsarria

+0

heureux d'aider !!! – coder