#lang racket (define example '((balaur . 1) (dwarf . 13) (hobbit . 1) (wizard . 1) (foods . 5))) (define (find x mset) (let ((res (filter (λ (p) (equal? (car p) x)) mset))) ; sau assoc (if (null? res) #f (cdar res)))) (define (cardinal mset) (apply + (map cdr mset))) (define (add x mset) (if (find x mset) (map (λ (p) (if (equal? (car p) x) (cons (car p) (add1 (cdr p))) p)) mset) (cons (cons (x 1)) mset))) (define (intersect ms1 ms2) (map (λ (k) (cons k (min (find k ms1) (find k ms2)))) (filter (λ (k) (assoc k ms2)) (map car ms1))))