2011-12-03 34 views
1

我有以下几点:解析从焦炭到数字的Prolog

is_digit(X):-char_type(X,digit). 

当我这样称呼它: is_digit(X)。

我得到的结果folloring:

X='0'; 
X='1'; 
... ; 
X='9' 

我需要得到那些相同的结果,但不包括引号。对不起,如果这是一个简单的问题,但我只是无法找到解决办法。谢谢!

回答

1

如果您希望号码使用atom_number(A,N)。即

?- char_type(X,digit),atom_number(X,N). 
X = '0', 
N = 0 ; 
X = '1', 
N = 1 ; 
X = '2', 
N = 2 ; 
X = '3', 
2
?- between(0, 9, X). 
X = 0 ; 
X = 1 ; 
X = 2 ; 
X = 3 ; 
X = 4 ; 
X = 5 ; 
X = 6 ; 
X = 7 ; 
X = 8 ; 
X = 9. 
2

如果你想成为ISO Prolog的实现中随身携带,需要使用number_chars/2atom_number/2只存在于SWI,YAP,Ciao。但是那些3和IF,B,GNU,SICStus,XSB,Jekejeke支持number_chars/2

X = '1', number_chars(N, [X]). 
+0

? - number_chars(2,X)。产生X = ['2']。对于OP来说不是一个很大的改进。相反,2个ISO谓词atom_codes/2和number_codes/2(即atom_number/2)的组合给出更好的结果。 – CapelliC

+1

@chac:OP要求转换十进制数字。至于'atom_number/2':提到的3个系统在几种情况下有所不同。所以更好地坚持ISO并坚持一致。 – false