Articles of prolog

gprolog: ottenere uno stacktrace dopo un’eccezione

Durante l’utilizzo di gprolog, ho spesso eccezioni senza alcun tipo di numero di riga o contesto come questo: uncaught exception: error(instantiation_error,(is)/2) Senza alcun tipo di contesto. So che posso fare una trace ma ci vorrebbe molto tempo per eseguirne il debug con trace poiché ho bisogno di eseguire un sacco di cose prima di arrivare […]

Complessità dei predicati ISO Prolog

Esistono garanzie per i limiti superiori della complessità temporale dei predicati Prolog standard? Ad esempio: è certo che sort(+List, ?SortedList) viene eseguito in tempo O (nlog (n)) (n è la lunghezza di List ) in qualsiasi sistema Prolog conforms allo standard?

Utilizzando una variabile vincasting con `length / 2`

Ecco il problema: $ swipl Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.3.6-5-g5aeabd5) Copyright (c) 1990-2015 University of Amsterdam, VU Amsterdam SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details. For help, use ?- help(Topic). or ?- apropos(Word). ?- […]

Prolog rimuove solo elementi unici

Voglio restituire una lista che rimuove tutti gli elementi unici, ad esempio remUniqueVals([1,1,2,2,3,4,4,5,6,6,6],Q). Q = [1,1,2,2,4,4,6,6,6]. Il mio problema è che attualmente ho il codice che restituisce remUniqueVals([1,1,2,2,3,4,4,5,6,6,6],Q). Q = [1, 2, 4, 6, 6]. In questo modo viene restituita solo la prima istanza di questi valori non univoci. Ecco il mio codice: remUniqueVals([], []). […]

Overflow dello stack nella regola di grammatica di Prolog DCG: come gestire gli elenchi di grandi dimensioni in modo efficiente o pigramente

Sto analizzando un formato di file abbastanza semplice composto da una serie di linee, ogni riga con alcuni campi separati da spazio, che assomiglia a questo: l 0x9823 1 s 0x1111 3 l 0x1111 12 ⋮ Sto usando SWI-Prolog. Questo è il DCG che ho finora: :- consult(library(pure_input)). load_trace(Filename, Traces) :- phrase_from_file(trace_file_phrase(Traces), Filename). trace_file_phrase([]) –> […]

Prolog: una persona è un fratello di se stesso?

Sto avendo qualche problema a capire perché il mio codice in prolog fa qualcosa in base all’ordine in cui metto le mie regole. Ecco il mio database: parent(tom, bob). parent(tom, liz). parent(mary, bob). parent(mary, liz). male(tom). male(bob). female(mary). female(liz). E qui ci sono le regole: %difference(X, Y) ==> Predicate to check if two people X […]

Trova i poteri di 2 in una lista Prolog

Sto provando a creare un elenco in Prolog (SWI Prolog) e controllare quali numeri sono i poteri di 2 e il secondo a trovare quante volte un numero specifico è presente nell’elenco (in questo esempio sto cercando di trovare quante volte il numero 3 è nella lista). Per un esempio, se lo chiedi ?- check([0,2,3,-5,-2,1,8,7,4], […]

Prolog: filtrare una lista?

Attualmente sto lavorando a un progetto molto breve su Prolog, e sono rimasto bloccato cercando di applicare un “filtro” che ho creato su un elenco. Ho quello che potresti chiamare il filtro pronto, ma non posso applicarlo. Sarebbe meglio se illustri: filter(A, B) … restituisce ‘true’ se vengono soddisfatte determinate condizioni. filterList(A, [X, Y, Z]) […]

La notazione del successore Prolog produce risultati incompleti e loop infinito

Comincio a imparare Prolog e prima ho imparato a conoscere la notazione successiva. Ed è qui che scopro di scrivere gli assiomi di Peano in Prolog. Vedi pagina 12 del PDF : sum(0, M, M). sum(s(N), M, s(K)) :- sum(N,M,K). prod(0,M,0). prod(s(N), M, P) :- prod(N,M,K), sum(K,M,P). Ho inserito le regole di moltiplicazione in Prolog. […]

Qual è il logico “non” in Prolog?

Il problema che ho di fronte è un po ‘banale. Voglio usare logico non in Prolog, ma sembra che not/1 non è la cosa che voglio: course(ai). course(pl). course(os). have(X,Y) :- course(X),course(Y),not(X = Y). Chiedo: have(X,Y), write(XY), nl , fail. E non ottengo il risultato che voglio 🙁