;; The first three lines of this file were inserted by DrRacket. They record metadata ;; about the language level of this file in a form that our tools can easily process. #reader(lib "htdp-beginner-reader.ss" "lang")((modname lect21-natnum) (read-case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ()))) ; func-for-natnum : natNum -> ??? (define (func-for-natnum n) (cond [(zero? n) (...)] [(positive? n) (...(func-for-natnum (sub1 n)))])) ; countdown : natNum -> string (define (countdown n) (cond [(zero? n) "liftoff!"] [(positive? n) (string-append (number->string n) ", " (countdown (sub1 n)))])) (check-expect (countdown 0) "liftoff!") (check-expect (countdown 1) "1, liftoff!") (check-expect (countdown 3) "3, 2, 1, liftoff!") (check-expect (countdown 4) "4, 3, 2, 1, liftoff!") (check-expect (nums-down-from 0) (cons 0 empty)) (check-expect (nums-down-from 3) (cons 3 (cons 2 (cons 1 (cons 0 empty))))) (check-expect (nums-down-from 4) (cons 4 (cons 3 (cons 2 (cons 1 (cons 0 empty)))))) ; nums-down-from : natNum -> cons ; (define (nums-down-from n) (cond [(zero? n) (cons 0 empty)] [(positive? n) (cons n (nums-down-from (sub1 n)))])) (define (k-nums-up-to k n) (cond [(zero? k) (cons n empty)] [(positive? n) (cons (- n k) (k-nums-up-to (sub1 k) n))])) (define (nums-up-to n) (k-nums-up-to n n)) #;(define (nums-up-to n) (cond [(zero? n) (cons 0 empty)] [(positive? n) (snoc n (nums-down-from (sub1 n)))])) (check-expect (nums-up-to 4) (cons 0 (cons 1 (cons 2 (cons 3 (cons 4 empty)))))) (check-expect (nums-up-to 3) (cons 0 (cons 1 (cons 2 (cons 3 empty))))) (check-expect (nums-up-to 0) (cons 0 empty)) (define (sum-up-to n) (cond [(zero? n) 0] [(positive? n) (+ n (sum-up-to (sub1 n)))])) ; sum-up-to : natNum -> number ; Return 0+1+2+3+...+n. ; (check-expect (sum-up-to 0) 0) (check-expect (sum-up-to 1) 1) (check-expect (sum-up-to 2) 3) (check-expect (sum-up-to 3) 6) (check-expect (sum-up-to 4) 10)