0

我在DCG上浏览了这个例子

integer(I) -->
        digit(D0),
        digits(D),
        { number_codes(I, [D0|D])
        }.

digits([D|T]) -->
        digit(D), !,
        digits(T).
digits([]) -->
        [].

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

但是此示例仅在整数位于字符串开头时才解析整数(因为 digit(D0) 失败是 D0 不是数字代码)。如何解析字符串中任意位置的整数,例如“abc123def”?

4

1 回答 1

1

您可以添加如下内容:

non_digits--> [D], {not(code_type(D, digit))}, !, non_digits.
non_digits-->[].

然后添加一个呼叫以non_digits跳过非数字,例如:

integer_skip(I) -->
        non_digits,
        digit(D0),
        digits(D),
        { 
           number_codes(I, [D0|D])
        },
        non_digits.
于 2013-04-12T19:15:44.537 回答