我在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”?
答案 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.