summaryrefslogtreecommitdiff
path: root/examples/speech/pt-random.lali
blob: 1b3407cca4f6066b3ff796e13642bc46849bfa46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
;; Executa este script e diz uma combinação dos elementos da variável
;; words.
;;
;; Alguns exemplos que podes dizer (um exemplo por linha):
;; okay
;; nao nao
;; sim
;; (etc., existem mais combinações).

(set '_ '_)

(set 'words '((sim    +1)
              (okay   +0)
              (nao    -1)))

(set 'answer '((+2   "positival / querer" +0)
               (+1   "neutral / ser"       _)
               (+0   "negatival / forar"  -0)))

(set 'question '((+2   "sim / queres <verbo>" +0)
                 (+1   "<verbo>"               _)
                 (+0   "não <verbo>"          -0)
                 (-1   "<negação do vazio>"   -1)))

(defun assoc (el lst)
  (fill
   ((dif el (car (car lst))) (car lst))
   ((algo lst) '(f f f))
   (f (assoc el (cdr lst)))))

(defun without (el lst)
  (fill
   ((dif el (car lst)) f)
   ((algo (car lst)) t)
   (f (without el (cdr lst)))))

;; vv begin of training options vv

(defun train-all-questions ()
  (- (random +3) +1))

(defun train-negative-concord-questions ()
  -1)

(defun train-good-questions ()
  (random +2))

(defun train-all-answers ()
  (random +2))

;; ^^ end of training options ^^

(defun get-answer-score (the-words)
  (fill
   ((without f the-words)
    (prog
       (princ "\n~\n>> desconheço")
       (newline)
       f))
   (f (eval (cons + the-words)))))

(defun main ()
  (progs
   f
   ;; vv change training (just) here (below) vv
   (set 'target-question (train-all-questions))
   (set 'it-quest (assoc target-question question))
   (princ (car (cdr it-quest)))
   (princ "\b?\n")
   (newline)

   ;; vv change training (just) here (below) vv
   (set 'target-answer (train-all-answers))
   (princ "resposta ->")
   (princ (car (cdr (assoc target-answer answer))))
   (princ ".")

   (newline)
   (princ "dizer:")

   (set 'question-score target-question)
   (set 'my-words (readl))
   (differ my-words '(f))
   (set 'answer-score (get-answer-score
                       (map
                        (lambda (word)
                          (car (cdr (assoc word words))))
                        my-words)))
   (princ "\n~")
   (newline)
   (fill
    ((dif target-answer
          (+ question-score answer-score))
     'correct)
    (f 'wrong))))

(defun loop ()
  (set 'res (main))
  (fill
   ((dif res 'correct) (loop))
   ((dif res 'wrong) (prog (princ ">> errado") (newline)))
   (f f)))


(princ "Perante a pergunta, dizer de acordo com a resposta.\nDizer uma combinação (de uma ou mais) das seguintes palavras:\nsim, okay, nao.\n\nSe acertares, aparecerá outra pergunta.\nPodes dizer f para sair deste treino.\n-~-\n")
(newline)
(loop)