2011-10-18 63 views

回答

1

number/1会告诉你,如果一个对象是一个数字。 atom/1会告诉你,如果一个对象是一个原子,我认为这是你的意思是一个字符串。如果你的意思是一个真正的字符串(字符代码列表),那么

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

将做的伎俩。

所有这些都会在变量出现时失败。

+0

更好的命名,在答案的开始看到“对象”,能be:forall(member(X,List),number(X)) – CapelliC

+0

@chac:我不完全明白你在说什么,但是你的想法是,你可以将'forall'应用到列表的*元素* OP指的是(因为Prolog中的字符串实际上是列表本身)。 –

+0

有效地,我没有理解你的线索,谢谢你的解释。 – CapelliC

0

如果列表中包含要读成数字的字符串:

...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

相关问题