2011-10-18 1 views

Répondre

1

number/1 vous dira si un objet est un nombre. atom/1 vous dira si un objet est un atome, ce que je suppose être ce que vous entendez par une chaîne. Si vous vouliez dire une vraie chaîne (liste de codes de caractères), alors

fera l'affaire.

Tous ces éléments échoueront en présence de variables.

+0

mieux nommer, vu « objet » au début de réponse, pourrait be: forall (membre (X, Liste), nombre (X)) – CapelliC

+0

@chac: Je ne comprends pas complètement ce que vous dites, mais l'idée est que vous appliquez le 'forall' aux éléments * de la liste * auquel fait référence l'OP (car les chaînes de Prolog sont en fait des listes). –

+0

Effectivement, je n'ai pas compris votre indice, merci d'expliquer. – CapelliC

0

Si votre liste contient des chaînes que vous souhaitez lire les numéros:

...maplist(convert_element, List, OnlyNumbers), 

convert_element(Num, Num) :- number(Num). 
convert_element(String, Num) :- number_codes(Num, String). 
convert_element(Unknown, 0) :- throw(unknown(Unknown)). 

throw pourrait être remplacé par un message ...

+0

L'objectif 'convert_element (1, N)' réussit avec 'N = 1' mais produira finalement l'erreur' unknown (1)' en cas d'échec. Vous voulez une construction conditionnelle ou une négation pour couvrir cela. – false

Questions connexes