File: add-dispatch.rkt

package info (click to toggle)
racket 5.2.1%2Bg6~92c8784%2Bdfsg2-2%2Bdeb7u1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 88,676 kB
  • sloc: ansic: 229,942; sh: 31,883; lisp: 11,486; asm: 9,970; cpp: 2,310; makefile: 2,084; pascal: 2,075; exp: 416; xml: 62; perl: 10; python: 8
file content (41 lines) | stat: -rw-r--r-- 1,250 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#lang racket
(require web-server/servlet)

(define (extract-number req)
  (string->number
   (extract-binding/single
    'number
    (request-bindings req))))

; build-request-page : str str -> response
(define (build-request-page which-number k-url)
  (response/xexpr
   `(html (head (title "Enter a Number to Add"))
          (body ([bgcolor "white"])
                (form ([action ,k-url] [method "post"])
                      "Enter the " ,which-number " number to add: "
                      (input ([type "text"] [name "number"] [value ""]))
                      (input ([type "submit"] [name "enter"] [value "Enter"])))))))

(define (get-first req)
  (build-request-page "First" (add-url get-second)))

(define (get-second req)
  (define fst (extract-number req))
  (build-request-page "Second" (add-url display-sum fst)))

(define (display-sum req fst)
  (define snd (extract-number req))
  (response/xexpr
   `(html (head (title "Sum"))
          (body ([bgcolor "white"])
                (p "The answer is "
                   ,(number->string (+ fst snd)))))))

(define-values (start add-url)
  (dispatch-rules
   [("get-second") get-second]
   [("display-sum" (integer-arg)) display-sum]
   [else get-first]))

(serve/dispatch start)