Prolog, ciag graficzny

Odpowiedz Nowy wątek
2018-12-15 15:56
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

edytowany 1x, ostatnio: hauleth, 2018-12-15 22:07

Pozostało 580 znaków

2018-12-15 16:26

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

Pozostało 580 znaków

2018-12-15 17:11
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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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