如何检查一个变量是一个字符串还是序数?
答
number/1
会告诉你,如果一个对象是一个数字。 atom/1
会告诉你,如果一个对象是一个原子,我认为这是你的意思是一个字符串。如果你的意思是一个真正的字符串(字符代码列表),那么
string(Object) :-
forall(member(X, Object), number(X))
将做的伎俩。
所有这些都会在变量出现时失败。
答
如果列表中包含要读成数字的字符串:
...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
可以用一条消息来替代......
+0
目标'convert_element(1,N)'用'N = 1'成功,但最终会在失败时产生错误'unknown(1)'。你想要一些有条件的构造或否定来解决这个问题。 – false
更好的命名,在答案的开始看到“对象”,能be:forall(member(X,List),number(X)) – CapelliC
@chac:我不完全明白你在说什么,但是你的想法是,你可以将'forall'应用到列表的*元素* OP指的是(因为Prolog中的字符串实际上是列表本身)。 –
有效地,我没有理解你的线索,谢谢你的解释。 – CapelliC