Requisiti
Requisiti di business
- Obiettivo del progetto è di fornire una libreria che permetta di scrivere e risolvere programmi logici utilizzando il linguaggio scala. Inoltre realizzare un Domain Specific Language (DSL), in scala, la cui sintassi somigli il più possibile a quella del Prolog.
Requisiti funzionali
Requisiti utente
Nella descrizione dei requisiti utente si intende con utente colui che utilizzerà la libreria.
- L'utente deve poter costruire termini prolog. I termini sono:
- Constanti: atomi e numeri.
- Variabili: anonime e non.
- Termini composti: predicati, congiunzioni, disgiunzioni e liste.
- Clausole: fatti, regole e direttive.
- I termini devono essere ispezionabili dall'utente:
- L'utente deve poter ispezionare il valore delle costanti.
- L'utente deve poter ispezionare il nome delle variabili.
- L'utente deve poter ispezionare il funtore, l'arità e gli argomenti dei termini composti.
- L'utente deve poter ispezionare la testa e il corpo delle clausole.
- L'utente deve poter ispezionare se un termine e base oppure no.
- Dato un insieme di clausole, l'utente deve poter costruire teorie prolog.
- Data una teoria statica e/o teoria dinamica, e un termine che rappresenta il goal del programma, l'utente deve poter costruire un programma prolog.
- Deve essere possibile per l'utente modificare le parti di un programma prolog: teoria statica e/o dinamica o il goal del programma.
- Dato un programma prolog l'utente deve poter invocare un risolutore per la computazione delle soluzioni del programma.
- L'utente deve avere la possibilità di scegliere se le soluzioni debbano essere computate tutte insieme oppure una per volta.
- L'utente deve avere la possibilità di invocare un risolutore anche per ottenere le soluzioni di un programma prolog privo di una teoria composto quindi esclusivamente di un termine rappresentante un goal.
- L'utente per risolvere i programmi prolog deve poter scegliere tra i risolutori forniti dalla libreria oppure, tramite opportuna configurazione, tra risolutori compatibili implementati da terzi.
Requisiti di sistema
Nella descrizione dei requisiti di sistema si intende con sistema la libreria.
- Il sistema deve permette la costruzione dei termini prolog.
- Il sistema deve fornire un Domain Specific Language (DSL) tramite il quale sarà possibile costruire nella maniera più fedele e idiomatica possibile i costrutti del linguaggio prolog.
- Il sistema deve essere costruito in modo tale che l'utente che intende sfruttare il DSL abbia il controllo del contesto in cui utilizzarlo. Vale a dire che tutte le funzionalità che hanno a che fare specificatamente con il linguaggio prolog dovranno essere, all'occorrenza, abilitate dall'utente.
- Il sistema deve fornire un risolutore di programmi prolog predefinito.
Requisiti non funzionali
- Qualità: lo stile e la formattazione del codice sorgente verranno verificati tramite il plugin scalaFmt.
- Processo:
- le pipeline di continuous integration (CI) e continuous delivery (CD) verranno eseguite su Github per mezzo delle Github Actions;
- il sistema verrà rilasciato su maven central;
- il versionamento segue i principi del semantic versioning.
Requisiti d'implementazione
- Scala 3.x
- JDK 17+
- 2p-Kt 0.31+
- Lo sviluppo, in particolar modo per quanto riguarda l'implementazione di funzionalità core non banali, dovrà seguire i principi del Test Driven Development (TDD).