我试图写一个谓语和N={Expression,Number,Digit,Operator,Variable}
明确子句语法(DCG)的Prolog(作业)
T={1,2,3,+,-,*,(,),X,Y,Z}
和S是表达和程序P定义为
Expression-->Number
**Expression-->(Expression) Operator (Expression)**
Number-->Digit
**Number --> Digit Number**
Digit-->1
Digit-->2
Digit-->3
Operator-->+
Operator-->-
Operator-->*
Variable-->X
Variable-->Y
Variable-->Z
我认为然而,我实现许多份无法实现大胆的部分!
,通过根据程序P描述端子我序言代码:
expression(S,S).
expression(S,R):-number(S,R).
expression(S,R):-expression(S,R),-operator(S,['('|S]),expression(S,[')'|R]).
expression(S,R):-operator(S,[','|S1]),expression(S1,R).
expression(S,R):-variable(S,[','|S1]),expression(S1,R).
number(S,R):-digit(S,R).
digit(['1'|R],R).
digit(['2'|R],R).
digit(['3'|R],R).
operator(['+'|R],R).
operator(['-'|R],R).
operator(['*'|R],R).
variable(['X'|R],R).
variable(['Y'|R],R).
variable(['Z'|R],R).
请帮助我。
原始文法描述不完整。您定义了变量但未在表达式的定义中使用。 – lurker
@lurker是的,现在我注意到它。但是在程序定义中不使用变量。老实说,我很困惑dcg – limonik
您是否阅读过有关Prolog DCG的在线教程或讨论?他们可以很有帮助。例如,[教程 - 在SWI-Prolog中使用确定子句语法](http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB8QFjAA&url=http% 3A%2F%2Fwww.pathwayslms.com%2Fswipltuts%2Fdcg%2F&EI = XS6VVZLDGIy-ggTFhI3oDw&USG = AFQjCNE511aVfbhO5EBEJx2s5az0bKewcQ&BVM = bv.96952980,d.eXY)。谷歌搜索“DCG Prolog”会产生很多信息,可以帮助您了解DCG。 – lurker