(define html-wrap (lambda (body) (string-append "" body "" ))) (define html-wrap-list (lambda (list-html) (string-append "" ))) (define cookbook-as-html (lambda (cookbook) (cookbook-as-html-rec cookbook ""))) (define cookbook-as-html-rec (lambda (cookbook html) (if (null? cookbook) html (let ((recipe (car cookbook))) (cookbook-as-html-rec (cdr cookbook) (string-append html (recipe-as-html recipe) "
"))) ))) (define recipe-as-html (lambda (recipe) (string-append "

" (recipe-name recipe) "

" "Servings: " (number->string (recipe-servings recipe)) "
Ingredients
" (ingredients-as-html (recipe-ingredients recipe)) "
Steps
" (steps-as-html (recipe-steps recipe)) "
"))) (define pretty-ingredient (lambda (ingredient) (let* ((name (ingredient-name ingredient)) (amount (number->string (ingredient-amount ingredient))) (unit (ingredient-unit ingredient))) (string-append amount " " unit " " name)))) (define ingredients-as-html (lambda (ingredients) (list-as-html (map (lambda (x) (pretty-ingredient x)) ingredients)))) (define steps-as-html (lambda (steps) (list-as-html steps))) (define list-as-html (lambda (list) (html-wrap-list (list-as-html-rec list "")))) (define list-as-html-rec (lambda (list html) (if (null? list) html (list-as-html-rec (cdr list) (string-append html "
  • " (car list) "
  • \n")))))