如何为有效数字指定DCG?

Dou*_*ith 3 prolog dcg

我正在尝试为有效数字指定DCG,如下所示:

value(Number) --> valid_number(Number).
Run Code Online (Sandbox Code Playgroud)

基本上检查指定的值是否为数字(它也可以是变量,因此需要检查).

我不知道如何构建这个valid_numberDCG /谓词.

现在我只有:

valid_number('1') --> ['1'].
valid_number('2') --> ['2'].
...
Run Code Online (Sandbox Code Playgroud)

哪个有效,但显然很糟糕.尝试类似的东西:

valid_number(Number) --> { integer(Number), Number = Number }.
Run Code Online (Sandbox Code Playgroud)

哪两个都不起作用,并且无可否认看起来相当粗糙(对不起,对Prolog很新,并试图学习最佳实践).

我将如何构建此DCG /谓词来验证它是否为数字?

mat*_*mat 5

我给你一个描述自然数的代码示例:

:- set_prolog_flag(double_quotes, chars).

natural_number(N) --> number_(Cs), { number_codes(N, Cs) }.

number_([D|Ds]) --> digit(D), number_(Ds).
number_([D])    --> digit(D).

digit(D) --> [D], { char_type(D, digit) }.

用法示例:

?- phrase(natural_number(N), "123").
N = 123 ;
false.
Run Code Online (Sandbox Code Playgroud)

我将这个概括为其他数字作为练习.

  • 以这样的方式编写它并不是很好吗,它也可以用`double_quoted`设置为`chars`来运行? (2认同)