Wpis z mikrobloga

Próbuję napisać program w prologu, który będzie wyświetlał elementy listy w nowej linii z automatycznym liczeniem.

Ma wyglądać tak:

% pisz_numer([ala, kot, mama, pies]).
% 1. ala
% 2. kot
% 3. mama
% 4. pies

Napisałem takie coś:

pisz_numer([],0).
pisz_numer([Element|Ogon],Dlug) :- print(Dlug), print(Element), nl, pisz_numer(Ogon,X), Dlug is X+1.

Fajnie zlicza wszystko, ale przy wywołaniu:

pisznumer([ala, kot, auto, pies, kot],X).


Wyświetla mi jakieś dziwy:

91 ?- dlugosc([ala, kot, auto, pies, kot],X).
_G3917ala
_L170kot
_L185auto
_L200pies
_L215kot
X = 5

Ktoś może pomóc?

#programowanie
  • 24
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@frax: Ja nie wiem, nie ogarniam. Słaby jestem z programowania, dlatego szukam pomocy. :<

Możesz zobaczyć, dlaczego to wywołanie powoduje błąd:

Generalnie chodzi o to, że podaję numer 155 i program ma wypisać:
one
  • Odpowiedz
No i jeszcze cały czas przy konsultowaniu dostaję:

71 ?- consult('C:/Users/GrabkaMan/Desktop/ZadDom.pl').

Correct to: "consult('C:/Users/GrabkaMan/Desktop/ZadDom.pl')"?
  • Odpowiedz
@GrabkaMan: Definiujesz 2 termy: wypisz/1 i wypisz/2 - nic dziwnego, że wypisz/2 się pętli, skoro nie ma klauzuli kończącej. Zamień wypisz([]). na wypisz([], _). i powinno się zacząć kończyć.

Przy czym ten argument X nie wygląda na sensownie używany. Nie wiem, co właściwie ta funkcja ma robić, w drugi argument wstawić listę termów reprezentujących cyfry? Czy wypisać coś na ekran? W tej chwili będzie tam lądować term odpowiadający ostatniej cyfrze.
  • Odpowiedz
@GrabkaMan: Oczywiście źle napisałem, wypisz([], _) nie pomaga, bo tam jest 0 zamiast []. W każdym razie to było to miejsce, gdzie się pętliło - brak klauzuli kończącej.
  • Odpowiedz
@frax: Takie coś na razie mam:

wypisz(0) :- !.

wypisz(Liczba):- Liczba1 is Liczba mod 10, cyfry(Liczba1,X), dodaj(X,L,[X|L]) ,Liczba2 is (Liczba // 10), wypisz(Liczba2).


Jak dam zamiast tego dodaj print(X) to działa fajnie. Ale potrzebuję w drugą stronę wypisywać. :/
  • Odpowiedz
@frax: Jak dopisywać tutaj do listy? Na początek listy muszę dopisać słowa. Powyższe dodaj pewno by działało, ale nie wiem, co wpisać pod L.

Jakieś pomysły?
  • Odpowiedz