#lang racket ;; -------------------------------------------------- ;; Cursul al II-lea: ;; ;; Filtrarea listelor. Funcționala filter. ;; Trei probleme: ;; 1. numerele negative dintr-o listă ;; 2. multiplii lui doi dintr-o listă ;; 3. multiplii lui trei dintr-o listă ;; I. Implementare pe stivă (define filter-neg-stack (λ (l) (cond ((null? l) '()) ((< (car l) 0) `(,(car l) . ,(filter-neg-stack (cdr l)))) (else (filter-neg-stack (cdr l))) ))) (define filter-mul-5-stack (λ (l) (cond ((null? l) '()) ((= (remainder (car l) 5) 0) `(,(car l) . ,(filter-mul-5-stack (cdr l)))) (else (filter-mul-5-stack (cdr l))) ))) (define filter-mul-3-stack (λ (l) (cond ((null? l) '()) ((= (remainder (car l) 3) 0) `(,(car l) . ,(filter-mul-3-stack (cdr l)))) (else (filter-mul-3-stack (cdr l))) ))) ;; II. Extragerea unui pattern ;;(define filter--stack ;; (λ (l) ;; (cond ((null? l) '()) ;; (( (car l)) `(,(car l) . ,(filter--stack (cdr l)))) ;; (else (filter--stack (cdr l))) ;; ))) (define filter-stack (λ (test l) (cond ((null? l) '()) ((test (car l)) `(,(car l) . ,(filter-stack test (cdr l)))) (else (filter-stack test (cdr l)))))) (define (filter-stack-neg l) (filter-stack (λ (x) (< x 0)) l)) (define (filter-stack-mul-5 l) (filter-stack (λ (x) (= (remainder x 5) 0)) l)) (define (filter-stack-mul-3 l) (filter-stack (λ (x) (= (remainder x 3) 0)) l)) ;; III. Implementare folosind funcționala filter (define (filter-neg l) (filter (λ (x) (< x 0)) l)) (define (filter-mul-5 l) (filter (λ (x) (= (remainder x 5) 0)) l)) (define (filter-mul-3 l) (filter (λ (x) (= (remainder x 3) 0)) l))