Bardzo podstawowa składnia prologu dcg
Staram się zrozumieć gramologię prologu i określonej klauzuli, ale bardzo trudno mi zrozumieć oba.
Naprawdę próbuję zrozumieć, jak używać składni dcg ...
Oto dwa przykłady:
Pierwszy to właściwie kod z innego pytania na tym forum, ale z dodatkowym pytaniem:
Kod wyglądał tak:
s --> first, operator, second.
first --> [X].
operator --> ['+'].
second --> [X].
A kiedy Prolog jest o to pytany, zwraca prawdę / fałsz, ale nie mogę przez całe życie dowiedzieć się, jak właściwie zmodyfikować to, aby „związać” wartość, więc jeśli zapytam s (X, [2, +, 2] , []). zwróci wartość pierwszego, więc zamiast zwracać prawdę, powiedzą X = 2
W każdym razie wracam do właściwego pytania. Mam kilka zasad w normalnym prologu i to jest jeden z nich; w rzeczywistości nic nie robi i został jedynie stworzony jako przykład.
do(X, Y, [H|T], Sum):-
H == 1, %check if H is 1
X = H,
Y = T,
Additional is H+5,
Sum is Additional+Additional.
Zasadniczo pytam, czy ktoś mógłby przetłumaczyć to na DCG, abym mógł spróbować zrozumieć podstawową składnię DCG! Próbowałem czytać kilka samouczków, ale czuję, że nie miałem nic mądrzejszego ...