解析字符串中的整数?

时间:2013-04-12 19:02:08

标签: prolog dcg

我在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)
        }.

但是这个例子只有当它在字符串的开头时解析一个整数(因为数字(D0)失败是D0不是数字代码)。 如何在字符串中的任何位置解析整数,例如“abc123def”?

1 个答案:

答案 0 :(得分: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.