2012-11-15 20 views
1

我已經使用下面的邏輯爲上述程序,但它給誤差表示>=/2: Arithmetic: 'a/0' is not a function。我該怎麼做才能糾正這個程序?序言程序檢查給定輸入是否是數字或大寫或小寫

digit(X):- X>=0,X<10,write('input is digit'). 
uppercase(X):- X>='A',X<'[',write('input is uppercase'). 
lowercase(X):- X>='a',X<'{',write('input is lowercase'). 

感謝

回答

1

如果你想只分類在ISO Prolog的ASCII字符,你可以以不同的方式做到這一點:

爲字符其表示爲長度爲1個原子。要比較它們,您可以使用通用術語比較(@>=)/2,(@>)/2 ...在您的示例中,那將是:

digit_char(X) :- atom_length(X,1), X @>= '0', X @=< '9'. 
... 

作爲字符代碼這是表示排序序列整數(聲音令人印象深刻的普通整數?它只是ASCII碼)。

digit_code(X) :- integer(X), X >= 0'0, X =< 0'9. 
... 

如果您需要在兩者之間進行轉換,有char_code/2

對於Unicode,事情還沒有全面上市,並達成協議。在SWI中,有char_type/2code_type/2。當心,這些東西都還在不斷髮展......

更多關於字符和代碼,請參閱 What is the difference between ' and " in Prolog?

相關問題