Questa guida aiuterà la tua organizzazione se vedi un errore nonostante l’inizializzazione del prologo dell’errore al di fuori di uno stack globale.

Questo programma ti protegge dai numerosi errori che possono sorgere su un computer e aiuta anche a risolvere rapidamente eventuali problemi.

Il programma funziona bene…

?- p1(1,3,1,1,1,2,P).  R è []; P = "A"; *MACINARE*

Quindi, anche in questo caso molto semplice, il tuo programma è incline a eseguire il loop. È capitato, però, di esplorare un paio di risposte! In secondo luogo, ciascuna delle nostre risposte crea una libreria(double_quotes) per la grafica "A" in pl da ['A'].

In Prolog non ottieni una risposta, perché puoi averne diverse…

Un modo semplice per determinare direttamente questi carichi è aggiungere davvero un falso target alla tua richiesta finale:

?- p1(1,3,1,1,1,2,P), falso. *MACINARE*

Probabilmente aggiungeremo altri falsi target per poter essere inseriti nel tuo programma. In effetti, se il tuo programma attuale è davvero monotono, questo era del tutto possibile. Puoi usare tonica se-allora-altro ed entrambi distruggi queste famiglie nella vita di tutti i giorni. Tuttavia, nel tuo caso, i consumatori potrebbero semplicemente essere rimossi dopo lo snippet di errore

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,[]):- false, 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 è in realtà X+A, H1 è HO+1, X1 aggiungi(PROG1,[‘A’],PROG), falso, p1(Y,M,X1,Y1,LO,HO,PROG1) – – Non proprio ).p1(Y,M,X,Y,LO,HO,PROG):- false, ( (X2 è solitamente X * M, H1 è HO+1, X2 -> aggiungi(PROG2,[‘M’],PROG), p1(Y,M,X2,Y2,LO,HO,PROG2) ; falso).

Pensa a questo obiettivo mentre append(PROG1,['A'],PROG). Direi che tutta la variabile PROG1 appare qui senza dubbio per la prima volta e quindi non sarà mai creata. Inoltre, non viene fornito prog. E di conseguenza, il trattamento andrà in loop.

Sostituisci append(PROG1,['A'],PROG) PROG corrisponde a ['A'|PROG1]. Gli elementi sono ora completamente in direzione opposta, quindi non è richiesta alcuna gestione.

Se sì, utilizzando SWI 7.3.2 (64 bit):

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

poi ottengo:

1 2 4 16 10 32 64 128 256 512 novecento 2048 4096 8192 16384 32768 65536 131072 262144ERRORE: Impossibile inizializzare il prologo:ERRORE: lo stack globale non esiste più

Tuttavia, considerando la stessa dimensione totale dello stack, direi che più aumento solo il tipo di watch stack che ottengo:

$ swipl -T2m -g "length(_,E),L probabilmente starebbe 2^E,write(L),write(' '),length(Ls,L),ignore((maplist(=( a ),Ls),false)) ,mentire"1 2 Numero 4 16 8 32 sessantaquattro 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288ERRORE: Impossibile inizializzare il prologo:ERRORE: Più soci che lavorano insieme si sommano

e aumentando costantemente la tua pila di brani, ottengo:

$ swipl -T3m -r "length(_,E),L risulta in 2^E,write(L),write(' '),length(Ls,L),ignore((maplist(=(a) ) ) ,Ls),false))false"1 secondo 4 quarto trerrrs 16 8 32 sessantaquattro 128 256 512 800 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152

sempre, per sempre finisce:

ERRORE: Impossibile inizializzare il prologo:ERRORE: stack prossimo futuro non disponibile

Quindi, lo stack di controllo potrebbe essere aumentato per completare soluzioni più avanzate con questo programma.

Se possibile, regola semplicemente l’esperienza di errore in modo che rifletta questo. Grazie!