-
Notifications
You must be signed in to change notification settings - Fork 0
/
TDA_option_20793038_SanhuezaVega.rkt
138 lines (120 loc) · 4.32 KB
/
TDA_option_20793038_SanhuezaVega.rkt
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#lang racket
; ######################################## TDA OPTION ########################################
; ######################################## REPRESENTACION ####################################
; Este TDA corresponde a una opcion.
; Dentro se guardara un id de la opcion, un mensaje, un id de chatbot, un id de flujo
; y una lista de palabras que caracterizan a la opcion.
; ######################################## CONSTRUCTOR #######################################
; Descripcion: Funcion que construye una opcion.
; Dom: id (int) X message (string) X chatbot-codelink (int) X flow-codelink (int) X keyword (list)
; Rec: option (list)
; Recursion: -
(define option (lambda (id message chatbot-codelink flow-codelink . keyword)
(list
id
(string-downcase message)
chatbot-codelink
flow-codelink
(map string-downcase keyword)
)
))
; ######################################## PERTENENCIA #######################################
; Descripcion: Funcion recursiva que verifica si existe una opcion que tenga el id o palabra clave
; indicado.
; Dom: option-list (list) X message (string)
; Rec: boolean
; Recursion: cola
(define option-exists-by-message?-rec (lambda (option-list message)
(define aux (lambda (ol message)
(if (null? ol)
#f
(if (or (not (boolean? (member message (get-option-keyword (car ol)))))
(string=? message (number->string (get-option-id (car ol)))))
#t
(aux (cdr ol) message)
)
)
))
(aux option-list message)
))
; Descripcion: Funcion no recursiva que verifica si existe una opcion que tenga el id o palabra clave
; indicado.
; Dom: option-list (list) X message (string)
; Rec: boolean
; Recursion: -
(define option-exists-by-message?-norec (lambda (option-list message)
(not (null?
(filter
(lambda (o)
(or (not (boolean? (member message (get-option-keyword o))))
(string=? message (number->string (get-option-id o))))
)
option-list
)
))
))
; ######################################## SELECTOR ##########################################
; Descripcion: Funcion que obtiene el id de una opcion.
; Dom: option (list)
; Rec: id (int)
; Recursion: -
(define get-option-id (lambda (option)
(list-ref option 0)
))
; Descripcion: Funcion que obtiene el mensaje de una opcion.
; Dom: option (list)
; Rec: message (string)
; Recursion: -
(define get-option-message (lambda (option)
(list-ref option 1)
))
; Descripcion: Funcion que obtiene el id del chatbot enlazado a la opcion.
; Dom: option (list)
; Rec: cb-codelink (int)
; Recursion: -
(define get-option-cb-codelink (lambda (option)
(list-ref option 2)
))
; Descripcion: Funcion que obtiene el id del flujo enlazado a la opcion.
; Dom: option (list)
; Rec: fl-codelink (int)
; Recursion: -
(define get-option-fl-codelink (lambda (option)
(list-ref option 3)
))
; Descripcion: Funcion que obtiene las palabras claves relacionadas a la opcion.
; Dom: option (list)
; Rec: keyword (list)
; Recursion: -
(define get-option-keyword (lambda (option)
(list-ref option 4)
))
; Descripcion: Funcion recursiva que obtiene una opcion a partir de su id o palabra clave.
; Dom: option-list (list) X message (string)
; Rec: option (list)
; Recursion: cola
(define get-option-by-message-rec (lambda (option-list message)
(define aux (lambda (ol message)
(if (or (not (boolean? (member message (get-option-keyword (car ol)))))
(string=? message (number->string (get-option-id (car ol)))))
(car ol)
(aux (cdr ol) message)
)
))
(aux option-list message)
))
; Descripcion: Funcion no recursiva que obtiene una opcion a partir de su id o palabra clave.
; Dom: option-list (list) X message (string)
; Rec: option (list)
; Recursion: -
(define get-option-by-message-norec (lambda (option-list message)
(car (filter
(lambda (o)
(or (not (boolean? (member message (get-option-keyword o))))
(string=? message (number->string (get-option-id o))))
)
option-list
))
))
; ######################################## EXPORTACION DE FUNCION ############################
(provide (all-defined-out))