Как проверить, является ли переменная строкой или числом в прологе? - PullRequest
1 голос
/ 18 октября 2011

Я пишу программу, которая добавляет номера списка, предоставленного пользователем, но, в случае наличия строки, выдает ошибку.Как проверить, является ли элемент списка строкой или числом?Thanx

Ответы [ 2 ]

1 голос
/ 18 октября 2011

number/1 сообщит вам, является ли объект числом. atom/1 скажет вам, является ли объект атомом, что я предполагаю, что вы подразумеваете под строкой. Если вы имели в виду истинную строку (список кодов символов), то

string(Object) :-
    forall(member(X, Object), number(X))

сделает свое дело.

Все они потерпят неудачу при наличии переменных.

0 голосов
/ 18 октября 2011

Если ваш список содержит строки, которые вы хотите прочитать как числа:

...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 можно заменить на сообщение ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...