@@ -15,6 +15,56 @@ logica direttamente in Scala, sfruttando tutti i vantaggi del caso (Quali?).
1515
1616### Requisiti utente  
1717
18+ Nella descrizione dei requisiti utente si intende con ** utente**  colui che * utilizzerà la libreria* .
19+ 
20+ 1 .  L'utente deve poter costruire termini prolog. I termini sono:
21+    1 .  Constanti: atomi e numeri.
22+    2 .  Variabili: anonime e non.
23+    3 .  Termini composti: predicati, congiunzioni, disgiunzioni e liste.
24+    4 .  Clausole: fatti, regole e direttive.
25+ 2 .  I termini devono essere ispezionabili dall'utente:
26+    1 .  L'utente deve poter ispezionare il valore delle costanti.
27+    2 .  L'utente deve poter ispezionare il nome delle variabili.
28+    3 .  L'utente deve poter ispezionare il funtore, l'arità e gli argomenti dei termini composti.
29+    4 .  L'utente deve poter ispezionare la testa e il corpo delle clausole.
30+    5 .  L'utente deve poter ispezionare se un termine e base oppure no.
31+ 3 .  Dato un insieme di clausole, l'utente deve poter costruire teorie prolog.
32+ 4 .  Data una teoria statica e/o teoria dinamica, e un termine che rappresenta il goal del programma, l'utente deve 
33+ poter costruire un programma prolog.
34+ 5 .  Deve essere possibile per l'utente modificare le parti di un programma prolog: teoria statica e/o dinamica o il goal 
35+ del programma.
36+ 6 .  Dato un programma prolog l'utente deve poter invocare un risolutore per la computazione delle soluzioni del programma.
37+ 7 .  L'utente deve avere la possibilità di scegliere se le soluzioni debbano essere computate tutte insieme oppure una per
38+ volta.
39+ 8 .  L'utente deve avere la possibilità di invocare un risolutore anche per ottenere le soluzioni di un programma prolog privo
40+ di una teoria composto quindi esclusivamente di un termine rappresentante un goal.
41+ 9 .  L'utente per risolvere i programmi prolog deve poter scegliere tra i risolutori forniti dalla libreria oppure, tramite
42+ opportuna configurazione, tra risolutori compatibili implementati da terzi.
43+ 
1844### Requisiti di sistema  
1945
20- ## Requisiti Non Funzionali  
46+ Nella descrizione dei requisiti di sistema si intende con ** sistema**  la * libreria* .
47+ 
48+ 1 .  Il sistema deve permette la costruzione dei termini prolog.
49+ 2 .  Il sistema deve fornire un Domain Specic Language (DSL) tramite il quale sarà possibile costruire nella maniera più 
50+ fedele e idiomatica possibile i costrutti del linguaggio prolog.
51+ 3 .  Il sistema deve essere costruito in modo tale che l'utente che intende sfruttare il DSL abbia il controllo del contesto
52+ in cui utilizzarlo. Vale a dire che tutte le funzionalità che hanno a che fare specificatamente con il linguaggio prolog 
53+ dovranno essere, all'occorenza, abilitate dall'utente.
54+ 4 .  Il sistema deve fornire un risolutore di programmi prolog predefinito.
55+ 
56+ ## Requisiti non funzionali  
57+ 
58+ *  ** Qualità** : lo stile e la formattazione del codice sorgente verranno verificati tramite il plugin * scalaFmt* .
59+ *  ** Processo** : 
60+   -  le pipeline di continuous integration (CI) e continuous delivery (CD) verrano eseguite su Github per mezzo delle * Github Actions* ;
61+   -  il sistema verrà rilasciato su maven central;
62+   -  il versionamento segue i principi del * semantic versioning* .
63+ 
64+ ## Requisiti d'implementazione  
65+ 
66+ *  Scala 3.x
67+ *  JDK 17+
68+ *  2p-Kt 0.31+
69+ *  Lo sviluppo, in particolar modo per quanto riguarda l'implementazione di funzionalità core non banali, dovrà seguire 
70+ i principi del Test Driven Development (* TDD* ).
0 commit comments