rendered paste body;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; contract: encontra_substring : string string - > boolean
;; pourpose: descobrir se uma determinada string ├® substring de outra
;; example:
;Welcome to DrScheme, version 360.
;Language: Standard (R5RS).
;> (encontra_substring "cat" "t")
;#t
;> (encontra_substring "cat" "s")
;#f
;>
;; definition:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (encontra_substring substring1 string1)
(cond((< (string-length substring1) (string-length string1))#f)
((string=? (substring substring1 0 (string-length string1)) string1)#t)
(else (encontra_substring (substring substring1 1) string1))
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; contract: substitui_substring : substring1 substring2 string1 string2 - > string
;; pourpose: descobrir se uma determinada string ├® substring de outra e substitu├¡-la
;; foi usada a função encontra_substring como modelo, alterando-se o resultado
;; das verifica├º├Áes.
;; example:
;Welcome to DrScheme, version 360.
;Language: Standard (R5RS).
;> (substitui_substring "cat" "" "a" "o")
;"cot"
;>
;; definition:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (substitui_substring substring1 substring2 string1 string2)
(cond((< (string-length substring1) (string-length string1))
(string-append substring2 substring1)
)
((string=? (substring substring1 0 (string-length string1)) string1)
(string-append substring2 string2 (substring substring1 (string-length string1)))
)
(else (substitui_substring (substring substring1 1) (string-append substring2 (substring substring1 0 1)) string1 string2))
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; contract: compara_listas : lista(string) lista(string) - > boolean
;; pourpose: descobrir se uma lista ├® id├¬ntica ├á outra por compara├º├úo e retornar
;; booleano para a resposta
;; example:
;Welcome to DrScheme, version 360.
;Language: Standard (R5RS).
;> (compara_listas '("c") '("c" "b"))
;#f
;> (compara_listas '("c") '("c"))
;#t
;; definition:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (compara_listas lista1 lista2)
(cond ((and (null? lista1) (null? lista2)) #t)
((and (not (null? lista1)) (null? lista2)) #f)
((and (null? lista1) (not (null? lista2))) #f)
((string=? (car lista1) (car lista2))
(compara_listas (cdr lista1) (cdr lista2))
)
(else #f)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; contract: substitui_substring : substring1 substring2 string1 string2 - > string
;; pourpose: descobrir se uma determinada string ├® substring de outra e substitu├¡-la
;; foi usada a função encontra_substring como modelo, alterando-se o resultado
;; das verifica├º├Áes.
;; example:
;Welcome to DrScheme, version 360.
;Language: Standard (R5RS).
;> (substitui_substring "cat" "" "a" "o")
;"cot"
;>
;; definition:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define regra '( ("s"."M") ("M"."aMa") ("M"."bMb") ("M"."aa") ("M"."bb") ("M"."a") ("M"."b") ))
(define (gera_cadeia cadeia_entrada cadeia_saida)
(cond((compara_listas (cadeia_entrada) (cadeia_saida)) (cadeia_entrada))
(else (begin
(= cadeia_entrada cadeia_saida)
(= cadeia_saida (troca_strings cadeia_entrada)
(gera_cadeia cadeia_entrada cadeia_saida)
))
)
)
(define (troca_strings entradas)
(for-each (substitui_substring (car entradas) ""
)