Come devo disegnare il predicato (speciale), che è usato per l'aritmetica, in un albero di ricerca di Prolog?

0

Normalmente costruisco il mio albero di ricerca seguendo la convenzione comune :

  • Inserisci query o obiettivi che necessitano di unificazione all'interno delle caselle del nodo.
  • Annota i punti decisionali sui bordi, in cui Prolog ha assegnato un elemento a una variabile.
  • I nodi foglia che sono completamente saturi saranno una scatola vuota, rappresentano una soluzione.
  • I nodi foglia che non possono essere soddisfatti e rappresentano i tentativi falliti avranno l'obiettivo insoddisfatto nella loro casella, per renderli ancora più chiari seguirò anche la convenzione di marcarli posizionando sotto di essi un simbolo a croce.

Il modo in cui sopra ha il bell'effetto collaterale che è facile vedere i punti decisionali. Ma per quanto riguarda la creazione di un albero di ricerca per qualcosa di simile:

accLen([_|T],A,L)  :-    Anew  is  A+1,  accLen(T,Anew,L).
accLen([],A,A). 

In che modo l'assegnazione di Anew dovrebbe essere rappresentata nell'albero di ricerca? Non è un punto di decisione, il codice non ha altra scelta che assegnarlo 1 più il valore corrente di A. Lo posiziona ancora sul bordo, ma lo sottolinea o qualcosa del genere?

    
posta bonzaibanzai 08.12.2013 - 12:47
fonte

1 risposta

0

Dal mio punto di vista, un predicato is non è molto diverso da un'unificazione esplicita tramite = o implicito tramite l'abbinamento di una clausola all'input: causa l'associazione di una variabile. Non lascia all'interprete una scelta inferiore a quella di X = 3 , è solo un po 'più furbo su come recuperare l'unico valore che deve essere assegnato.

L'unica cosa che è diversa è che is non può avere successo finché non viene istanziato il lato destro. Se vuoi rappresentare questa limitazione, allora hai bisogno di una rappresentazione speciale, ma altrimenti tratterei = e is lo stesso.

    
risposta data 08.12.2013 - 14:30
fonte

Leggi altre domande sui tag