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.