Comment puis-je calculer la longueur d'une 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 = [].
est le dernier n'est-il correct? pour être cohérent n'est-ce pas size_sub([[]],X).
ou size_sub([],X)
la réponse serait []
OriginalL'auteur Mary | 2011-09-15
À la carte
longueur/2
sur une liste de listes, on peut utiliser le méta-prédicatmaplist/3
comme ceci:OriginalL'auteur Thanos Tintinidis
Ok vous avez besoin pour commencer avec le cas de base qui est de la dernière réponse
donc
size_sub([],X).
est vrai siX=[]
donc d'abord vous écrivez que la règle.Alors vous devez faire de la inductive étape, une liste qui est l'un plus long que le précédent. Je vais supposer que vous avez une taille/2 la fonction de détermination de la taille d'une liste unique (si non, merci de commentaire).
De manière inductive étape va opérer sur la longueur du premier paramètre de N->N+1. Nous la représenter par l'entrelacement de la tête de la syntaxe de la liste sera
[H|T]
maintenant le deuxième paramètre (votre réponse) est la longueur de H avec le résultat de l'appel size_sub sur T. Comme nous ne pouvons pas spécifier des règles dans les paramètres dans l'en-tête, nous allons utiliser N pour représenter la longueur de H et T2 pour représenter le résultat de size_sub sur T.Donc, la première partie de la règle devient
size_sub([H|T],[N|T2]):-
maintenant nous suivre avec les prédicats qui permettra de faire valoir les valeurs de N et T2.
mettant tous ensemble, vous obtenez
taille/2 est beaucoup plus simple de cas et suivant le même processus de base + inductive, vous devriez être en mesure de créer des règles pour cela. S'il vous plaît commentaire si vous avez besoin de plus d'aide.
** EDIT - Demande pour la taille/2 définition **
Définir la taille/2
Commencer avec le cas de base, la liste vide a une taille de 0.
Maintenant l'étape inductive. La taille de la liste de longueur(N+1) est de la taille d'une liste de longueur N). Donc permet de définir notre liste
[_|T]
j'ai défini la liste à l'aide de _ pour représenter la tête parce que nous n'avons jamais utiliser de sorte que nous pouvons simplement utiliser l'anonyme variable. Permet utiliser N pour représenter la longueur de T et de M à N+1.donc
taille([_|L],M):-
maintenant permet de définir N
et enfin affirmer que M est égal à N + 1
donc tout mettre ensemble
de réponses mis à jour
OriginalL'auteur Bob Vale