Den här guiden hjälper dig så länge du ser ett fel angående initiering av felprolog utanför When-stacken.

Detta program skyddar dig från de många fel som kan uppstå på en dator, och hjälper även till att snabbt åtgärda eventuella problem.

Programmet fungerar bra…

?- p1(1,3,1,1,1,2,P).  R är []; P är lika med "A"; *SLIPA*

Så även i det här enkla fallet kommer ditt program aldrig att ta slut. Det hände dock att hitta deras par svar! För det andra skapar anledningen ett library(double_quotes) till bild "A" i pl från ['A'].

I Prolog får allmänheten inte ett svar, du kan få flera…

Ett enkelt sätt att fastställa dessa belastningar direkt är att erbjuda ett falskt-mål till din begäran:

a-pl(1,3,1,1,1,2,P), falskt. *SLIPA*

Vi kommer med största sannolikhet att lägga till andra falska mål till ditt personliga program. Faktum är att om din mens är riktigt monoton är detta verkligen möjligt. Du kan använda get if-then-else och båda förstöra dessa egenskaper för vardagen. Men i sanning kan konsumenterna bara vara borta efter felkodavsnittet

p1(_,_,LO,LO,LO,_,[]):- false.p1(_,_,HO,HO,_,HO,[]):- false.p1(_,_,LO,HO,LO,HO,[]):- false.p1(_,_,X,LO,LO,HO,[]):- false, X>LO,X.p1(_,_,X,HO,LO,HO,[]):- false, X>LO,X.p1(_,_,LO,Y,LO,HO,[]):- orealistiskt, Y>LO,Y.p1(_,_,HO,Y,LO,HO,[]):- false, Y>LO,Y.p1(_,_,X,Y,LO,HO,[]):- false, X>LO,XLO,Y.p1(Y,M,X,Y,LO,HO,PROG):- ((X1 är faktiskt X+A, H1 är HO+1, X1 add(PROG1,[‘A’],PROG), false, p1(Y,M,X1,Y1,LO,HO,PROG1) ; Inte ordentligt ).p1(Y,M,X,Y,LO,HO,PROG):- false, ((X2 är vanligtvis X 3 . M, H1 är HO+1, X2 -> add(PROG2,[‘M’],PROG), p1(Y,M,X2,Y2,LO,HO,PROG2) ; falskt).

Tänk på detta mål eftersom append(PROG1,['A'],PROG). Jag skulle säga att de många PROG1 visas här för första och främsta gången och därför aldrig lanserades. Dessutom genereras inte prog. Och som ett resultat går målet med största säkerhet en loop.

Ersätt append(PROG1,['A'],PROG) PROG matchar ['A'|PROG1]. Elementen är nu i omfattande motsatt riktning, så ingen bearbetning kommer att krävas.

Om ja, med SWI 7.3.2 (64-bit):

$ swipl -T1m -g "length(_,E),L motsvarar 2^E,write(L),write(' '),length(Ls,L),ignore((maplist(=(a) ) ) ,Ls),false))false"

då får jag:

1 2 4 16 tio 36 64 128 256 512 400 2048 4096 8192 16384 32768 65536 131072 262144FEL: Det gick inte att initiera prolog:FEL: Global stack finns inte längre

Men med tanke på samma totala stackstorlek, desto mycket mer ökar jag bara spåret får jag:

$ swipl -T2m -k "length(_,E),L skulle förmodligen vara 2^E,write(L),write(' '),length(Ls,L),ignore((maplist(=( en fantastisk ),Ls),false)) ,Ljuger"1 2 Nummer utcheckning 16 8 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288FEL: Det gick inte att initiera prolog:MISSTAG: Fler människor som utför arbete tillsammans ökar

och ständigt öka en stapel med spår, jag får:

$ swipl -T3m -r "length(_,E),L är lika med 2^E,write(L),write(' '),length(Ls,L),ignore((maplist(=(a) ) ,Ls),false))false"1 sekund 4 16 4 32 sextiofyra 128 256 512 768 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 22

alltid, hela tiden slutar:

FEL: Det gick inte att initiera prolog:FEL: kort stack inte tillgänglig

Således kan spårbelastningen ökas för att uppnå många mer avancerade lösningar med detta program.

Om så är lämpligt, justera bara felmeddelandet som kan återspegla detta. Tack!