Prolog, pomoc w zrozumieniu działania programu.

Prolog, pomoc w zrozumieniu działania programu.
PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 316
0

Napisałem sobie program:

Kopiuj
zmiana([],L).

zmiana([1|T],[2|L]):-
	zmiana(T,L).
	
zmiana([2|T],[3|L]):-
	zmiana(T,L).

Działa niby dobrze, zamienia mi tak jak chciałem 1 na 2 i 2 na 3, ale wynik zapytania np.
?- zmiana([1,1,1],X).
X = [2, 2, 2|_2668] .
Zmieniło poprawnie, tylko skąd ta ostatnia liczba? (Wiem że sobie prolog to dopisuje) Tylko dlaczego dopisał i jak zrobić żeby nie dopisał?

PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 316
0
Kopiuj
zmiana([],L).

zmiana([H|T],[H1|L]):-
	H1 is H+1,
	zmiana(T,L).

To działa podobnie, do każdego elementu listy dodaje 1, ale nadal na końcu dodaje liczbę.

Silv
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
0

Przeczytaj te rzeczy:

W tym drugim w zaakceptowanej odpowiedzi jest wspomniany sposób zamiany tych nazw zmiennych (bo są to nazwy zmiennych).

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

Nie za wiele mi to wyjaśnia niestety.

UA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
2

A zastanowiłeś się nad sensem tego?

Kopiuj
zmiana([],L).

Bo to właśnie jest źle. Jeżeli lista jest pusta, to na co ma być zmieniona (a przy zmianie każdej listy na końcu dochodzimy przez rekursję do listy pustej)? Bo Ty zmieniasz ją na nieskojarzoną z niczym zmienną L (i właśnie ta nieskojarzona zmienna wyświetlana jest np. jako _2668).

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.