我正在尝试为有效数字指定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 /谓词来验证它是否为数字?
我给你一个描述自然数的代码示例:
:- 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)
我将这个概括为其他数字作为练习.
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |