Articles of prolog

Ottieni elementi dall’elenco di elenchi

è ansible ottenere tutti gli elementi dall’elenco delle liste in Prolog? Qualcosa come: Abbiamo getElements ([[a, b, [c]], d, e], f, g, [h, [i, j]]], S) e il risultato è: S = [a , b, c, d, e, f, g, h, i, j] … Grazie per l’aiuto.

Spiegazione di un algoritmo Prolog per aggiungere due elenchi

Questo è un algoritmo per aggiungere insieme due liste: Domains list= integer* Predicates nondeterm append(list, list, list) Clauses append([], List, List) :- !. append([H|L1], List2, [H|L3]) :- append(L1, List2, L3). Goal append([9,2,3,4], [-10,-5,6,7,8], Ot). Il risultato è una lista [9,2,3,4,-10,-5,6,7,8] , e viene salvata in ” Ot “. La mia domanda è, come funziona? Quello […]

Costruire un albero delle espressioni in Prolog

Sto cercando un modo per build un albero delle espressioni in Prolog. Ho già fatto alcuni esperimenti e ho trovato il seguente codice di lavoro (che gestirà solo le costanti e l’espressione più): const(_). plus(_, _). eval(const(R), R). eval(plus(A, B), R) :- number(A), number(B), R is A+B. eval(plus(A, B), R) :- number(A), eval(B, B_R), R […]

Prolog: il primo valore duplicato

Devo trovare il primo valore duplicato in una lista. prep(3,[1,3,5,3,5]). Dovrebbe essere vero prep(5,[1,3,5,3,5]). Dovrebbe essere falso. Ho pensato di verificare l’uguaglianza con il valore corrente e i membri della lista precedente fino a quando trovo un duplicato, se ne trova uno testerà l’uguaglianza con X ma non ho idea di come farlo in Prolog! […]

Prolog findall Implementation

Sono stato incaricato di implementare una versione di findall in Prolog senza utilizzare alcun built-in di Prolog tranne che per not e cut, quindi fondamentalmente in puro Prolog. Sto cercando di cercare un albero per tutti i discendenti diretti e restituire i risultati in un elenco parent(a, b). parent(b, c). parent(b, d). parent(e, d). Quello […]

Dovrei evitare la ricorsione della coda in Prolog e in generale?

Sto lavorando con il libro online “Learn Prolog now” per divertimento. Sto cercando di scrivere un predicato che attraversi ogni membro di una lista e ne aggiunga uno, usando gli accumulatori. L’ho già fatto facilmente senza ricorsione della coda. addone([],[]). addone([X|Xs],[Y|Ys]) :- Y is X+1, addone(Xs,Ys). Ma ho letto che è meglio evitare questo tipo […]

Quali sono gli usi del predicato fallito in Prolog?

Non riesco a trovare una situazione in cui ne avrei bisogno.

Lazy Lists in Prolog?

È ansible avere elenchi pigri in Prolog? Qualcosa come il seguente: ones([1 | Y]) :- ones(Y). Anche se questo ovviamente non funziona come è scritto.

Sapere quando usare il taglio nel prologo

Ho seguito un corso in cui ho imparato un po ‘di prologo. Non riuscivo a capire come / quando usare i tagli. Anche se ho un’idea generale dei tagli, non riesco a usarli correttamente. Qualcuno può spiegarlo brevemente o dare un buon tutorial (che non è learnprolognow.org) sui “tagli” che possono consigliare?

Come contare il numero di occorrenze di elementi in un elenco in Prolog

Im nuovo in prolog che s perché la domanda può essere facile per voi ma non potrei trovare la risposta. Qualcuno può aiutarmi. Voglio semplicemente una funzione di conteggio st count([c,c,a,a,b,b,d,a,c,b,d,d,a], O). restituirà il numero di occorrenze dei membri della lista. O = [[a, 4], [b, 3], [c, 3], [d, 3]]