(load "/home/rebelsky/Web/Scheme/webutils.scm") ; 0: last name ; 1: first name ; 2: nickname ; 3: home ; 4: major ; 5: year (define sample-students (list (vector "Poythress" "Margaret" "Louisa" "Florida" "Psychological French" "2005") (vector "Becker" "Margaret" "Maggie" "Minnesota" "Psychology" "2006") (vector "Job" "Nileena" "Alexy" "Chicago" "Chemistry" "2005") (vector "Krasinski" "Dan" "Not so sketchy" "Chicago" "Undeclared" "2007") (vector "Henderson" "Cole" "Hat Guy" "Central Illinois" "Cartoons" "2007") (vector "Sullivan" "Peter" "Pete" "Grinnell" "High School" "2009") )) (define search-students (lambda (key get-key students) (cond ((null? students) null) ((equal? (get-key (car students)) key) (cons (car students) (search-students key get-key (cdr students)))) (else (search-students key get-key (cdr students)))))) (define student->html (lambda (student) (string-append "
" (vector-ref student 1) " " (vector-ref student 2) " " (vector-ref student 0) " is from " (vector-ref student 3) " and majoring in " (vector-ref student 4) "
"))) (define students->html (lambda (students) (apply string-append (map student->html students)))) (define page (lambda () (results-page (get-cgi-variable "field" "First Name") (get-cgi-variable "key" "Margaret")))) (define field->func (lambda (field) (cond ((string-ci=? field "Last Name") (lambda (student) (vector-ref student 0))) ((string-ci=? field "First Name") (lambda (student) (vector-ref student 1))) ((string-ci=? field "Nickname") (lambda (student) (vector-ref student 2))) ((string-ci=? field "Home") (lambda (student) (vector-ref student 3))) ((string-ci=? field "Major") (lambda (student) (vector-ref student 4))) ((string-ci=? field "Year") (lambda (student) (vector-ref student 5))) (else (lambda (student) (vector-ref student 0)))))) (define results-page (lambda (field value) (let ((matches (search-students value (field->func field) sample-students))) (if (null? matches) (make-page (head (string-append "Search for " value "failed")) (body "")) (make-page (head (string-append "Results for " value)) (body (string-append (paragraph (string-append "All " field "s that match " value ".")) (students->html matches))))))))