#lang racket (define (list->number digits) (foldl (λ (d acc) (+ (* 10 acc) d)) 0 (filter (compose not zero?) digits))) ; Alte variante de implementare a predicatului folosit de filter: ; (filter ((curry <) 0) digits) ; (filter (λ (d) (< 0 d)) digits) ; Filtrarea poate fi integrată în fold ;(define (list->number digits) ; (foldl (λ (d acc) (if (zero? d) acc (+ (* 10 acc) d))) ; 0 ; digits)) ;Barem: ;- fold cu 3 argumente de tip functie, acumulator, listă (1) ;- folosirea tipului corect de fold (între foldl și foldr) (0.5) ;- primul argument al lui fold este o funcție binară (0.5) ;- funcția binară corect implementată (1) ;- acumulator inițiat la valoarea corectă (0.5) ;- filter cu 2 argumente de tip predicat, listă (sau existența unei verificări în fold) (0.5) ;- predicat corect implementat (în filter sau fold) (1)