Articles of prolog

Appiattisci un elenco in Prolog

Ho lavorato con Prolog solo da un paio di giorni. Capisco alcune cose ma questo mi confonde davvero. Suppongo di scrivere una funzione che prende una lista e la appiattisce. ?- flatten([a,[b,c],[[d],[],[e]]],Xs). Xs = [a,b,c,d,e]. % expected result La funzione estrae le strutture interne della lista. Questo è quello che ho finora: flatten2([],[]). flatten2([Atom|ListTail],[Atom|RetList]) :- […]

Utilizzando \ == / 2 o dif / 2

Se voglio assicurarmi che due variabili non facciano riferimento allo stesso termine, qual è il modo preferito per farlo? Diciamo che ho bisogno di trovare i bordi diretti in un grafico, e un nodo non può avere un vantaggio su se stesso: node(a, x, y). node(b, z, x). node(c, y, y). (i bordi qui sono […]

Come posso aggiungere elenchi in Prolog?

Come posso aggiungere elenchi in Prolog? Ho cercato su Internet e ho trovato questo (da http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_7.html ) append([X|Y],Z,[X|W]) :- append(Y,Z,W). append([],X,X). Quindi ottiene la Z rimuovendo gli elementi di [X|Y] in [X|W] . Ma come posso aggiungere due liste insieme? Esempio, appendlist([1,2],[3,4,5],X). Il risultato sarà X = [1,2,3,4,5] . Inoltre non so cosa sta succedendo […]

Integrazione di Prolog con C #

Qualcuno sa di un modo simpatico (e preferibilmente gratuito) di integrare Prolog e C #? Sto cercando di creare una DLL di Prolog o simile per chiamare dal mio codice gestito e recuperare una risposta una volta che tutta l’elaborazione è stata completata. Sto cercando di essere prevalentemente unilaterale (c # chiama Prolog). Ho visto […]

Rimuovi i duplicati nella lista (Prolog)

Sono completamente nuovo a Prolog e sto provando alcuni esercizi. Uno di essi è: Scrivi un set di predicati (InList, OutList) che prende come input un elenco arbitrario e restituisce una lista in cui ogni elemento dell’elenco di input viene visualizzato solo una volta. Ecco la mia soluzione: member(X,[X|_]). member(X,[_|T]) :- member(X,T). set([],[]). set([H|T],[H|Out]) :- […]

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([]) –> […]