From 41268ca00786129b5ec3d2a8346bd09520b6dd97 Mon Sep 17 00:00:00 2001 From: Fernando Basso Date: Mon, 2 Oct 2017 08:03:04 -0300 Subject: [PATCH] vd: quick lambda expression/function examples. --- 09b-lambda-exprs/vd01-lambda-exprs.rkt | 73 ++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 09b-lambda-exprs/vd01-lambda-exprs.rkt diff --git a/09b-lambda-exprs/vd01-lambda-exprs.rkt b/09b-lambda-exprs/vd01-lambda-exprs.rkt new file mode 100644 index 0000000..15a7f1c --- /dev/null +++ b/09b-lambda-exprs/vd01-lambda-exprs.rkt @@ -0,0 +1,73 @@ +#lang htdp/isl+ +(require 2htdp/image) + +; +; NOTE: isl+ is intermediate student language with lambda +; + +; +; PROBLEM: +; +; Rewite each of the following function definitions using lambda. +; + +;; Number (listof Number) -> (listof Number) +;; produce only elements of lon > threshold +(check-expect (only-bigger 2 empty) empty) +(check-expect (only-bigger 3 (list 2 4 5)) (list 4 5)) + +#; +(define (only-bigger threshold lon) + (local [(define (pred n) + (> n threshold))] + (filter pred lon))) + +(define (only-bigger threshold lon) + (filter (lambda (n) (> n threshold)) lon)) + +;; (listof Image) -> (listof Natural) +;; produce list of areas of images +(check-expect (all-areas (list (rectangle 2 3 "solid" "blue") + (square 10 "solid" "white"))) + (list 6 100)) + +#; +(define (all-areas loi) + (local [(define (area i) + (* (image-width i) + (image-height i)))] + (map area loi))) + +(define (all-areas loi) + (map (lambda (i) + (* (image-width i) + (image-height i))) loi)) + +;; (listof Number) -> (listof Number) +;; produce list of numbers sorted in ASCENDING order +;; ASSUMPTION: lon contains no duplicates +(check-expect (qsort empty) empty) +(check-expect (qsort (list 8)) (list 8)) +(check-expect (qsort (list 7 8 9)) (list 7 8 9)) +(check-expect (qsort (list 4 3 2 1)) (list 1 2 3 4)) +(check-expect (qsort (list 6 8 1 9 3 7 2)) (list 1 2 3 6 7 8 9)) + +#; +(define (qsort lon) + (if (empty? lon) + empty + (local [(define p (first lon)) + (define (p? n) (> n p))] + (append (qsort (filter p? lon)))))) + +(define (qsort lon) + (if (empty? lon) + empty + (local [(define p (first lon))] + (append (qsort (filter (λ (n) (< n p)) lon)) + (list p) + (qsort (filter (λ (n) (> n p)) lon)))))) +