Prolog, ciag graficzny

VE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
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:

Kopiuj
odejmij([],0).

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

Ale nie działa

PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 316
1

Można w ten sposób:

Kopiuj
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

PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 316
1

Robi to co chcesz:

Kopiuj
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.