;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Nombre: pertenece? ;; Objetivo: ;; comprobar si un dato pertenece a una lista sin sublistas ;; Descripción: ;; Se recorre la lista de forma recursiva para comprobar ;; si un elemento x está en una lista "sin" sublistas ;; Argumento: ;; - x: dato buscado ;; - lista: lista de elementos en la que se va a buscar a x ;; Funciones a las que llama: list?, null?, car, cdr ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (pertenece? x lista) (cond ;; se comprueba si es una lista ((not (list? lista)) #f) ;; se comprueba si es la lista vacía ((null? lista) #f) ;; se comprueba si es igual al primer elemento ((equal? x (car lista)) #t) ;; se busca en el resto de la lista (else (pertenece? x (cdr lista))) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Nombre: pertenece-completo? ;; Objetivo: ;; comprobar si un dato pertenece a una lista "con" sublistas ;; Descripción: ;; Se recorre la lista de forma recursiva para comprobar ;; si un elemento x está en una lista "con" sublistas ;; Argumento: ;; - x: dato buscado ;; - lista: lista de elementos en la que se va a buscar a x ;; Funciones a las que llama: list?, null?, car, cdr ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (pertenece-completo? x lista) (cond ;; se comprueba si es una lista ((not (list? lista)) #f) ;; se comprueba si es la lista vacía ((null? lista) #f) ;; se comprueba si el primer elemento es una sublista ((list? (car lista)) (cond ;; se comprueba si est? en la sublista ((pertenece-completo? x (car lista)) #t) ;; se busca en el resto de la lista (else (pertenece-completo? x (cdr lista))) ) ) ;; se comprueba si es igual al primer elemento ((equal? x (car lista)) #t) ;; se busca en el resto de la lista (else (pertenece-completo? x (cdr lista))) ) ) ;; EJEMPLOS (display "(pertenece? 'a '(b a c d e))") (newline) (pertenece? 'a '(b a c d e)) (display "(pertenece? 'a '((b a) (c d e)))") (newline) (pertenece? 'a '((b a) (c d e))) (newline) (display "(pertenece-completo? 'a '(b a c d e))") (newline) (pertenece-completo? 'a '(b a c d e)) (display "(pertenece-completo? 'a '((b a) (c d e)))") (newline) (pertenece-completo? 'a '((b a) (c d e)))