Functional Problem Solving (CSC 151 2015S) : Outlines

Outline 26: Preconditions, Revisited


Held: Wednesday, 4 March 2015

Back to Outline 25 - Recursion Basics, Continued. On to Outline 27 - Characters and Strings.

Summary

We revisit preconditions. We then consider programming techniques for ensuring that preconditions are met.

Related Pages

Overview

Administrivia

Upcoming Work

Extra Credit Opportunities

Academic

Peer Support (Morning Section)

Peer Support (Afternoon Section)

Miscellaneous (Extra Credit)

Other Good Things (No Extra Credit)

Too Many Tallies

Here are some of the ways that students wrote irgb-tally-dark. Which do you prefer?

(define irgb-tally-dark
  (lambda (lst)
    (cond
      [(null? lst) 0]
      [(irgb-dark? (car lst))
       (+ 1 (irgb-tally-dark (cdr lst)))]
      [else
       (irgb-tally-dark (cdr lst))])))

(define irgb-tally-dark
  (lambda (lst)
    (if (null? lst)
        0
        (if (irgb-dark? (car lst))
            (+ 1 (irgb-tally-dark (cdr lst)))
            (irgb-tally-dark (cdr lst))))))

(define irgb-tally-dark
  (lambda (lst)
    (if (null? lst)
        0
        (+ (if (irgb-dark? (car lst)) 1 0)
           (irgb-tally-dark (cdr lst))))))

(define irgb-tally-dark
  (lambda (lst)
    (- (length lst) (length (irgb-filter-out-dark lst)))))

(define irgb-tally-dark
  (lambda (lst)
    (length (irgb-select-dark lst))))

(define irgb-select-dark
  (lambda (lst)
    (cond
      [(null? lst) null]
      [(irgb-dark? (car lst))
       (cons (car lst)
             (irgb-select-dark (cdr lst)))]
      [else
       (irgb-select-dark (cdr lst))])))

(define irgb-tally-dark
  (lambda (lst)
    (sum (map (lambda (val) (if (irgb-dark? val) 1 0))))))

Preconditions

Reporting Failure

Husk and Kernel Programming

Lab