Quale struttura dati Lisp usare?

3

Sto studiando diversi giochi linguistici e sto cercando di implementarli in Common Lisp. Attualmente sto studiando un gioco che studia la relazione tra forme e significati. Un agente deve memorizzare l'associazione tra queste forme e significati. Una forma può avere più significati (ambiguità) e un significato può avere più forme (sinonimia). Inoltre, l'agente deve tenere traccia del punteggio di ogni coppia di significati per decidere quali utilizzare.

Ora mi chiedevo come creare una struttura dati in Lisp che potesse contenere tutte queste informazioni. Dovrebbe essere in grado di cercare sia sul significato che sulla forma e anche aggiungere nuove coppie di significato della forma.

La mia prima idea era la seguente. Crea una struttura che contiene la forma, il significato e il punteggio e in pratica conserva un elenco di tutte queste istanze di struct. Questo è abbastanza semplice da implementare, ma la ricerca sulla forma o sul significato diventa un dolore, dal momento che dovrei passare attraverso ogni elemento della lista.

La mia seconda idea è basata su una tabella come questa:

|          || form1   | form2   | form3   | ...
|----------||---------|---------|---------| ...
| meaning1 || score11 | score12 | score13 | ...
| meaning2 || score21 | score22 | score23 | ...
| meaning3 || score31 | score32 | score33 | ...

dove score11 è il punteggio per la forma che significa coppia (form1 . meaning1) . Il score_ij sarebbe vuoto se non esiste alcuna forma-significato pair (form_i . meaning_j) . Questo tipo di design renderebbe più facile la ricerca su entrambi i significati e le forme? Inoltre, non so quale tipo di struttura di dati Common Lisp potrei usare per questo.

Suggerimenti su quale struttura dati utilizzare per questo o altre idee di progettazione sono i benvenuti.

    
posta JNevens 05.11.2015 - 16:13
fonte

1 risposta

5

In genere utilizzerei un archivio relazionale incorporato per questo. Potrebbe fare una specie di Prolog in Lisp.

Una struttura di dati auto-scritta potrebbe essere così:

  • una classe CLOS per la tripla: significato, forma, punteggio
  • una mappatura tabella hash da un significato a un elenco di tripli
  • una mappatura tabella hash da un modulo a un elenco di tripli

Gli elenchi delle triple possono essere ordinati per punteggio.

Il vorrei scrivere il recupero e inserire funzioni per questo.

    
risposta data 05.11.2015 - 22:29
fonte

Leggi altre domande sui tag