के बाद से व्याकरण पुनरावर्ती नहीं छोड़ा जाता है, हम उपयोग कर सकते हैं एक DCG:
s --> a.
a --> [m], a, [n].
a --> [o].
तो हम पार्स या सभी को स्वीकार कर लिया दृश्यों उत्पन्न कर सकते हैं। उदाहरण के लिए, उत्पादन:
?- listing(s).
s(A, B) :-
a(A, B).
?- listing(a).
a([m|A], C) :-
a(A, B),
B=[n|C].
a([o|A], A).
कोई संलग्न/3 की आवश्यकता है, अंतर करने के लिए धन्यवाद सूचीबद्ध करता
संपादित का उपयोग कर संलग्न/3
s(Z) :- a(Z).
a(Z) :- append([m|X],[n],Z), a(X).
a([o]).
:
?- length(L, _), phrase(s, L).
L = [o]
L = [m, o, n]
L = [m, m, o, n, n]
...
Prolog कोड का निरीक्षण करने
एसडब्ल्यूआई-प्रोलॉग ने संलग्न किया है/2 (बस ऐप पर आधारित है अंत/3 ठीक से श्रृंखलित), कि अधिक पठनीय विकल्प
a(Z) :- append([[m],X,[n]], Z), a(X).
वैसे भी देते हैं, हम एक/1 रिकर्सिवली के बाद सूची का निर्माण किया गया/विभाजित
'ए (जेड)', लेकिन 'ए (जेड) 'न लिखें। इसी प्रकार सभी predicate नामों के साथ ... – repeat