Prolog, ciag graficzny

0

Cześć,

Mam do napisania program w prologu sprawdzający czy podana lista liczb tworzy ciąg graficzny (czy można stworzyć graf o wierzchołkach o zadanych stopniach). Jak napisać funkcję która zmniejsza daną ilość liczb w liście o jeden?

Próbowałem czegoś takiego:

odejmij([],0).

odejmij([H|T],X) :-
	P is X - 1,
	H is H - 1,
	odejmij(T,P).

Ale nie działa

1

Można w ten sposób:

odejmij(Lista, X) :-
	odejmij(Lista, [], X).

odejmij([H|B], Acc, X):-
    H1 is H - 1,
    append(Acc,[H1],Acc1),
    odejmij(B, Acc1, X).

odejmij([], Acc, Acc).

Odejmuje 1 od każdego elementu na liście

1

Robi to co chcesz:

odejmij(Lista, Pozycja, Wynik) :-
odejmij(Lista, [], Pozycja, Wynik).

odejmij([Glowa|Ogon], Acc, Pozycja, Wynik):-
    Pozycja > 0, !, 
  	append(Acc,[Glowa],Acc1),
  	Pozycja1 is Pozycja -1,
  	odejmij(Ogon, Acc1, Pozycja1, Wynik).

odejmij([H|T], Acc, 0, Wynik):-
	H11 is H - 1,
	append(Acc,[H11],Acc1),
	append(Acc1,T,Acc2),
	odejmij([], Acc2, 0, Wynik).

odejmij([], Acc2, 0, Acc2).

Porób jakieś łatwiejsze programy aby poćwiczyć, ja z prologiem nie miałem wiele do czynienia

1 użytkowników online, w tym zalogowanych: 0, gości: 1