我有以下几点:解析从焦炭到数字的Prolog
is_digit(X):-char_type(X,digit).
当我这样称呼它: is_digit(X)。
我得到的结果folloring:
X='0';
X='1';
... ;
X='9'
我需要得到那些相同的结果,但不包括引号。对不起,如果这是一个简单的问题,但我只是无法找到解决办法。谢谢!
我有以下几点:解析从焦炭到数字的Prolog
is_digit(X):-char_type(X,digit).
当我这样称呼它: is_digit(X)。
我得到的结果folloring:
X='0';
X='1';
... ;
X='9'
我需要得到那些相同的结果,但不包括引号。对不起,如果这是一个简单的问题,但我只是无法找到解决办法。谢谢!
如果您希望号码使用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',
?- between(0, 9, X).
X = 0 ;
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
X = 5 ;
X = 6 ;
X = 7 ;
X = 8 ;
X = 9.
如果你想成为ISO Prolog的实现中随身携带,需要使用number_chars/2
。 atom_number/2
只存在于SWI,YAP,Ciao。但是那些3和IF,B,GNU,SICStus,XSB,Jekejeke支持number_chars/2
。
X = '1', number_chars(N, [X]).
? - number_chars(2,X)。产生X = ['2']。对于OP来说不是一个很大的改进。相反,2个ISO谓词atom_codes/2和number_codes/2(即atom_number/2)的组合给出更好的结果。 – CapelliC
@chac:OP要求转换十进制数字。至于'atom_number/2':提到的3个系统在几种情况下有所不同。所以更好地坚持ISO并坚持一致。 – false