2011-12-03 77 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