我有以下幾點:解析從焦炭到數字的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