;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 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) "" )