Ten przewodnik pomoże, jeśli zobaczysz błąd podczas inicjowania prologu błędów poza dokładnym globalnym stosem.

Ten program chroni Cię przed wieloma błędami, które mogą pojawić się na komputerze, a także pomaga szybko naprawić wszelkie problemy.

Program ma się dobrze…

?- p1(1,3,1,1,1,1,2,P).  R to []; P = „A”; *MIELIĆ*

Więc nawet w przypadku bardzo prostego pomysłu Twój program na pewno zapętli się. Zdarzyło się jednak zobaczyć kilka odpowiedzi! Po drugie, obecnie odpowiedź tworzy bibliotekę(double_quotes) na papier "A" w pl z ['A'].

W Prologu nie otrzymasz jednej odpowiedzi, ponieważ możesz uzyskać kilka…

Łatwym sposobem bezpośredniego określenia tych ładunków jest dodanie false celu do swojego nagrodzonego żądania:

?- p1(1,3,1,1,1,1,2,P), fałsz. *MIELIĆ*

Prawdopodobnie dodamy inne false cele, które pozytywnie wpłyną na Twój program. W rzeczywistości, jeśli program jest naprawdę monotonny, uważa się to za całkiem możliwe. Możesz użyć struktury jeśli-to-inaczej i oba te strony zniszczyć w życiu codziennym. Jednak w przypadku, gdy konsumenci mogą po prostu zawsze usunąć po fragmencie błędu

p1(_,_,LO,LO,LO,_,[]):- fałsz.p1(_,_,HO,HO,_,HO,[]):- fałsz.p1(_,_,LO,HO,LO,HO,[]):- fałsz.p1(_,_,X,LO,LO,HO,[]):- false, X>LO,X.p1(_,_,X,HO,LO,HO,[]):- fałsz, X>LO,X.p1(_,_,LO,Y,LO,HO,[]):- false, Y>LO,Y.p1(_,_,HO,Y,LO,HO,[]):- false, Y>LO,Y.p1(_,_,X,Y,LO,HO,[]):- false, X>LO,XLO,Y.p1(R,M,X,Y,LO,HO,PROG):- ((X1 to faktycznie X+A, H1 to HO+1, X1 add(PROG1,[‘A’],PROG), fałsz, p1(R,M,X1,Y1,LO,HO,PROG1) — Niewłaściwie ).p1(R,M,X,Y,LO,HO,PROG):- fałsz, ( (X2 to zwykle X * M, H1 to HO+1, X2 -> add(PROG2,[‘M’],PROG), p1(R,M,X2,Y2,LO,HO,PROG2) ; fałszywe).

Pomyśl o tym celu jako append(PROG1,['A'],PROG). Powiedziałbym, że konkretna zmienna PROG1 pojawia się tutaj po raz pierwszy i dlatego nigdy nie została utworzona. Ponadto prog nie jest konstruowany. W rezultacie zdobycz zapętli się.

Zastąp append(PROG1,['A'],PROG) PROG spełnia ['A'|PROG1]. Elementy są teraz w dokładnie przeciwnym kierunku, więc praca z nimi nie jest wymagana.

Jeśli tak, dzięki SWI 7.3.2 (64-bit):

$ swipl -T1m -h "length(_,E),L równa się 2^E,write(L),write(' '),length(Ls,L),ignore((maplist(=(a)) ) ,Ls),fałsz)fałsz"

to otrzymuję:

1 2 4 16 10 32 64 128 256 512 700 2048 4096 8192 16384 32768 65536 131072 262144BŁĄD: Nie udało się zainicjować prologu:BŁĄD: Globalny stos już nie istnieje

Jednakże przydzieliłem ten sam całkowity rozmiar stosu, jego więcej zwiększam, tylko zwracam uwagę na typ stosu, który otrzymuję:

$ swipl -T2m -g "length(_,E),L prawdopodobnie często wynosi 2^E,write(L),write(' '),length(Ls,L),ignore((maplist(=) (a ),Ls),false)) ,Kłamstwo"1 2 Liczba 4 16 8 32 sześćdziesiąt cztery 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288BŁĄD: Nie udało się zainicjować prologu:BŁĄD: więcej osób pracujących razem sumuje się

i ciągle podnosząc stos utworów, otrzymuję:

$ swipl -T3m -r "length(_,E),L oznacza 2^E,write(L),write(' '),length(Ls,L),ignore((maplist(=(a)) ) ,Ls),fałsz)fałsz"1 sekunda 4 czwarte miejsce 16 8 32 sześćdziesiąt cztery 128 256 512 800 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152

zawsze, upewnij się, że się kończy:

BŁĄD: Nie udało się zainicjować prologu:BŁĄD: stos przejściowy niedostępny

W związku z tym stos kontroli można zwiększyć, aby osiągnąć bardziej zaawansowane rozwiązania dzięki temu programowi umiejętności.

Jeśli to możliwe, po prostu dostosuj zasadę błędu, aby to odzwierciedlić. Dziękuję!