Prolog, pomoc w zrozumieniu działania programu.

0

Napisałem sobie program:

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ł?

0
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ę.

0

Przeczytaj te rzeczy:

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

0

Nie za wiele mi to wyjaśnia niestety.

2

A zastanowiłeś się nad sensem tego?

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).

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