在Prolog中实现算术解析器。

问题描述 投票:0回答:1

我有以下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],[])..

prolog context-free-grammar dcg arithmetic-expressions
1个回答
2
投票

您可以检查是否 Xfirstsecond 是数字。

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

second-->[X], {number(X)}.
© www.soinside.com 2019 - 2024. All rights reserved.