在Prolog中实现算术解析器

在Prolog中实现算术解析器,prolog,context-free-grammar,dcg,arithmetic-expressions,Prolog,Context Free Grammar,Dcg,Arithmetic Expressions,我有以下Prolog代码: expression-->first,operator,second. first-->[X]. operator-->['+'];['-']. second-->[X]. 编译后,机器在命令行中对以下类型的查询响应“是”: | ?- expression([5,'+',3],[]). | ?- expression(['a','-','b'],[]). | ?- expression([2.8,'+',3.2],[]). 如何将此限制为仅

我有以下Prolog代码:

expression-->first,operator,second.
first-->[X].
operator-->['+'];['-'].
second-->[X].
编译后,机器在命令行中对以下类型的查询响应“是”:

| ?- expression([5,'+',3],[]).
| ?- expression(['a','-','b'],[]).
| ?- expression([2.8,'+',3.2],[]).

如何将此限制为仅限数字?因此,只有涉及数字的表达式才应该是真实的,例如:
|?-expression([92',+',23.48],])。
您可以检查
第一个
第二个
中的
X
是否是数字:

first-->[X], {number(X)}.

second-->[X], {number(X)}.