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').

ありがとう

4

1 に答える 1

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/2ありcode_type/2ます。注意してください、これらのものはまだ進化しています...

文字とコードの詳細について は、Prologの「」と「」の違いは何ですか?を参照してください。

于 2012-11-15T23:00:19.753 に答える