我試圖寫一個謂語和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