Clarifying the use of the name of the argument in s/s/d

This commit is contained in:
Jay McCarthy 2012-05-11 20:12:39 -06:00
parent 329d3bb3c8
commit 409b717ec2
23 changed files with 217 additions and 217 deletions

View File

@ -1,8 +1,8 @@
#lang scribble/doc
@(require scribble/manual
(for-label racket)
(for-label web-server/servlet)
(for-label db)
(for-label racket
(except-in web-server/servlet make-url)
db)
"tutorial-util.rkt")
@(define xexpr @tech[#:doc '(lib "xml/xml.scrbl")]{X-expression})
@ -1179,14 +1179,14 @@ element in the rendering code, and the name used for it in the extracting code:
@code:comment{Send an HTML page of the content of the}
@code:comment{blog.}
(define (render-blog-page a-blog request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts a-blog make-url)
,(render-posts a-blog embed/url)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
@code:comment{"title" is used here}
(input ((name "title")))
(input ((name "body")))
@ -1281,14 +1281,14 @@ Finally, here is how to use @racket[new-post-formlet] in @racket[render-blog-pag
@code:comment{Sends an HTML page of the content of the}
@code:comment{blog.}
(define (render-blog-page a-blog request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts a-blog make-url)
,(render-posts a-blog embed/url)
(form ([action
,(make-url insert-post-handler)])
,(embed/url insert-post-handler)])
,@(formlet-display new-post-formlet)
(input ([type "submit"])))))))

View File

@ -16,14 +16,14 @@
;; Produces an HTML page of the content of the
;; blog.
(define (render-blog-page a-blog request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts a-blog make-url)
,(render-posts a-blog embed/url)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
(input ((name "title")))
(input ((name "body")))
(input ((type "submit"))))))))
@ -43,7 +43,7 @@
;; The user will be able to either insert new comments
;; or go back to render-blog-page.
(define (render-post-detail-page a-blog a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Post Details"))
(body
@ -53,10 +53,10 @@
,(render-as-itemized-list
(post-comments a-post))
(form ((action
,(make-url insert-comment-handler)))
,(embed/url insert-comment-handler)))
(input ((name "comment")))
(input ((type "submit"))))
(a ((href ,(make-url back-handler)))
(a ((href ,(embed/url back-handler)))
"Back to the blog")))))
(define (parse-comment bindings)
@ -82,7 +82,7 @@
;; the detail page of the post.
(define (render-confirm-add-comment-page a-blog a-comment
a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Add a Comment"))
(body
@ -91,9 +91,9 @@
"will be added to "
(div ,(post-title a-post))
(p (a ((href ,(make-url yes-handler)))
(p (a ((href ,(embed/url yes-handler)))
"Yes, add the comment."))
(p (a ((href ,(make-url cancel-handler)))
(p (a ((href ,(embed/url cancel-handler)))
"No, I changed my mind!"))))))
(define (yes-handler request)
@ -108,24 +108,24 @@
;; render-post: post (handler -> string) -> xexpr
;; Consumes a post, produces an xexpr fragment of the post.
;; The fragment contains a link to show a detailed view of the post.
(define (render-post a-blog a-post make-url)
(define (render-post a-blog a-post embed/url)
(local [(define (view-post-handler request)
(render-post-detail-page a-blog a-post request))]
`(div ((class "post"))
(a ((href ,(make-url view-post-handler)))
(a ((href ,(embed/url view-post-handler)))
,(post-title a-post))
(p ,(post-body a-post))
(div ,(number->string (length (post-comments a-post)))
" comment(s)"))))
;; render-posts: blog (handler -> string) -> xexpr
;; Consumes a make-url, produces an xexpr fragment
;; Consumes a embed/url, produces an xexpr fragment
;; of all its posts.
(define (render-posts a-blog make-url)
(local [(define (render-post/make-url a-post)
(render-post a-blog a-post make-url))]
(define (render-posts a-blog embed/url)
(local [(define (render-post/embed/url a-post)
(render-post a-blog a-post embed/url))]
`(div ((class "posts"))
,@(map render-post/make-url (blog-posts a-blog)))))
,@(map render-post/embed/url (blog-posts a-blog)))))
;; render-as-itemized-list: (listof xexpr) -> xexpr
;; Consumes a list of items, and produces a rendering as

View File

@ -3,11 +3,11 @@
racket/local
"../dummy-sqlite.rkt")
;; A blog is a (make-blog db)
;; A blog is a (blog db)
;; where db is an sqlite database handle
(struct blog (db))
;; A post is a (make-post blog id)
;; A post is a (post blog id)
;; where blog is a blog and id is an integer?
(struct post (blog id))

View File

@ -1,14 +1,14 @@
#lang web-server/insta
;; A blog is a (listof post)
;; and a post is a (make-post title body)
;; and a post is a (post title body)
(struct post (title body))
;; BLOG: blog
;; The static blog.
(define BLOG
(list (post "First Post" "This is my first post")
(post "Second Post" "This is another post")))
(list (post "Second Post" "This is another post")
(post "First Post" "This is my first post")))
;; start: request -> response
;; Consumes a request, and produces a page that displays all of the

View File

@ -16,14 +16,14 @@
;; Produces an HTML page of the content of the
;; blog.
(define (render-blog-page a-blog request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts a-blog make-url)
,(render-posts a-blog embed/url)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
(input ((name "title")))
(input ((name "body")))
(input ((type "submit"))))))))
@ -43,7 +43,7 @@
;; The user will be able to either insert new comments
;; or go back to render-blog-page.
(define (render-post-detail-page a-blog a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Post Details"))
(body
@ -53,10 +53,10 @@
,(render-as-itemized-list
(post-comments a-post))
(form ((action
,(make-url insert-comment-handler)))
,(embed/url insert-comment-handler)))
(input ((name "comment")))
(input ((type "submit"))))
(a ((href ,(make-url back-handler)))
(a ((href ,(embed/url back-handler)))
"Back to the blog")))))
(define (parse-comment bindings)
@ -82,7 +82,7 @@
;; the detail page of the post.
(define (render-confirm-add-comment-page a-blog a-comment
a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Add a Comment"))
(body
@ -91,9 +91,9 @@
"will be added to "
(div ,(post-title a-post))
(p (a ((href ,(make-url yes-handler)))
(p (a ((href ,(embed/url yes-handler)))
"Yes, add the comment."))
(p (a ((href ,(make-url cancel-handler)))
(p (a ((href ,(embed/url cancel-handler)))
"No, I changed my mind!"))))))
(define (yes-handler request)
@ -108,24 +108,24 @@
;; render-post: post (handler -> string) -> xexpr
;; Consumes a post, produces an xexpr fragment of the post.
;; The fragment contains a link to show a detailed view of the post.
(define (render-post a-blog a-post make-url)
(define (render-post a-blog a-post embed/url)
(local [(define (view-post-handler request)
(render-post-detail-page a-blog a-post request))]
`(div ((class "post"))
(a ((href ,(make-url view-post-handler)))
(a ((href ,(embed/url view-post-handler)))
,(post-title a-post))
(p ,(post-body a-post))
(div ,(number->string (length (post-comments a-post)))
" comment(s)"))))
;; render-posts: blog (handler -> string) -> xexpr
;; Consumes a make-url, produces an xexpr fragment
;; Consumes a embed/url, produces an xexpr fragment
;; of all its posts.
(define (render-posts a-blog make-url)
(local [(define (render-post/make-url a-post)
(render-post a-blog a-post make-url))]
(define (render-posts a-blog embed/url)
(local [(define (render-post/embed/url a-post)
(render-post a-blog a-post embed/url))]
`(div ((class "posts"))
,@(map render-post/make-url (blog-posts a-blog)))))
,@(map render-post/embed/url (blog-posts a-blog)))))
;; render-as-itemized-list: (listof xexpr) -> xexpr
;; Consumes a list of items, and produces a rendering as

View File

@ -25,14 +25,14 @@
;; Produces an HTML page of the content of the
;; blog.
(define (render-blog-page a-blog request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts a-blog make-url)
,(render-posts a-blog embed/url)
(form ([action
,(make-url insert-post-handler)])
,(embed/url insert-post-handler)])
,@(formlet-display new-post-formlet)
(input ([type "submit"])))))))
@ -54,7 +54,7 @@
;; The user will be able to either insert new comments
;; or go back to render-blog-page.
(define (render-post-detail-page a-blog a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Post Details"))
(body
@ -64,10 +64,10 @@
,(render-as-itemized-list
(post-comments a-post))
(form ([action
,(make-url insert-comment-handler)])
,(embed/url insert-comment-handler)])
,@(formlet-display new-comment-formlet)
(input ([type "submit"])))
(a ([href ,(make-url back-handler)])
(a ([href ,(embed/url back-handler)])
"Back to the blog")))))
(define (insert-comment-handler request)
@ -90,7 +90,7 @@
;; the detail page of the post.
(define (render-confirm-add-comment-page a-blog a-comment
a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Add a Comment"))
(body
@ -99,9 +99,9 @@
"will be added to "
(div ,(post-title a-post))
(p (a ([href ,(make-url yes-handler)])
(p (a ([href ,(embed/url yes-handler)])
"Yes, add the comment."))
(p (a ([href ,(make-url cancel-handler)])
(p (a ([href ,(embed/url cancel-handler)])
"No, I changed my mind!"))))))
(define (yes-handler request)
@ -116,24 +116,24 @@
;; render-post: post (handler -> string) -> xexpr
;; Consumes a post, produces an xexpr fragment of the post.
;; The fragment contains a link to show a detailed view of the post.
(define (render-post a-blog a-post make-url)
(define (render-post a-blog a-post embed/url)
(local [(define (view-post-handler request)
(render-post-detail-page a-blog a-post request))]
`(div ([class "post"])
(a ([href ,(make-url view-post-handler)])
(a ([href ,(embed/url view-post-handler)])
,(post-title a-post))
(p ,(post-body a-post))
(div ,(number->string (length (post-comments a-post)))
" comment(s)"))))
;; render-posts: blog (handler -> string) -> xexpr
;; Consumes a make-url, produces an xexpr fragment
;; Consumes a embed/url, produces an xexpr fragment
;; of all its posts.
(define (render-posts a-blog make-url)
(local [(define (render-post/make-url a-post)
(render-post a-blog a-post make-url))]
(define (render-posts a-blog embed/url)
(local [(define (render-post/embed/url a-post)
(render-post a-blog a-post embed/url))]
`(div ([class "posts"])
,@(map render-post/make-url (blog-posts a-blog)))))
,@(map render-post/embed/url (blog-posts a-blog)))))
;; render-as-itemized-list: (listof xexpr) -> xexpr
;; Consumes a list of items, and produces a rendering as

View File

@ -1,14 +1,14 @@
#lang web-server/insta
;; A blog is a (listof post)
;; and a post is a (make-post title body)
;; and a post is a (post title body)
(struct post (title body))
;; BLOG: blog
;; The static blog.
(define BLOG
(list (post "First Post" "This is my first post")
(post "Second Post" "This is another post")))
(list (post "Second Post" "This is another post")
(post "First Post" "This is my first post")))
;; start: request -> response
;; Consumes a request and produces a page that displays all of the

View File

@ -1,14 +1,14 @@
#lang web-server/insta
;; A blog is a (listof post)
;; and a post is a (make-post title body)
;; and a post is a (post title body)
(struct post (title body))
;; BLOG: blog
;; The static blog.
(define BLOG
(list (post "First Post" "This is my first post")
(post "Second Post" "This is another post")))
(list (post "Second Post" "This is another post")
(post "First Post" "This is my first post")))
;; start: request -> doesn't return
;; Consumes a request and produces a page that displays all of the
@ -26,14 +26,14 @@
;; Consumes a blog and a request, and produces an HTML page
;; of the content of the blog.
(define (render-blog-page a-blog request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts a-blog)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
(input ((name "title")))
(input ((name "body")))
(input ((type "submit"))))))))

View File

@ -1,10 +1,10 @@
#lang web-server/insta
;; A blog is a (make-blog posts)
;; A blog is a (blog posts)
;; where posts is a (listof post)
(struct blog (posts) #:mutable)
;; and post is a (make-post title body)
;; and post is a (post title body)
;; where title is a string, and body is a string
(struct post (title body))
@ -12,8 +12,8 @@
;; The initial BLOG.
(define BLOG
(blog
(list (post "First Post" "This is my first post")
(post "Second Post" "This is another post"))))
(list (post "Second Post" "This is another post")
(post "First Post" "This is my first post"))))
;; blog-insert-post!: blog post -> void
;; Consumes a blog and a post, adds the post at the top of the blog.
@ -36,14 +36,14 @@
;; render-blog-page: request -> doesn't return
;; Produces an HTML page of the content of the BLOG.
(define (render-blog-page request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
(input ((name "title")))
(input ((name "body")))
(input ((type "submit"))))))))

View File

@ -1,10 +1,10 @@
#lang web-server/insta
;; A blog is a (make-blog posts)
;; A blog is a (blog posts)
;; where posts is a (listof post)
(struct blog (posts) #:mutable)
;; and post is a (make-post title body comments)
;; and post is a (post title body comments)
;; where title is a string, body is a string,
;; and comments is a (listof string)
(struct post (title body comments) #:mutable)
@ -13,12 +13,12 @@
;; The initial BLOG.
(define BLOG
(blog
(list (post "First Post"
"This is my first post"
(list "First comment!"))
(post "Second Post"
(list (post "Second Post"
"This is another post"
(list)))))
(list))
(post "First Post"
"This is my first post"
(list "First comment!")))))
;; blog-insert-post!: blog post -> void
;; Consumes a blog and a post, adds the post at the top of the blog.
@ -45,14 +45,14 @@
;; Produces an HTML page of the content of the
;; BLOG.
(define (render-blog-page request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts make-url)
,(render-posts embed/url)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
(input ((name "title")))
(input ((name "body")))
(input ((type "submit"))))))))
@ -75,7 +75,7 @@
;; Consumes a post and request, and produces a detail page
;; of the post. The user will be able to insert new comments.
(define (render-post-detail-page a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Post Details"))
(body
@ -85,7 +85,7 @@
,(render-as-itemized-list
(post-comments a-post))
(form ((action
,(make-url insert-comment-handler)))
,(embed/url insert-comment-handler)))
(input ((name "comment")))
(input ((type "submit"))))))))
@ -104,24 +104,24 @@
;; render-post: post (handler -> string) -> xexpr
;; Consumes a post, produces an xexpr fragment of the post.
;; The fragment contains a link to show a detailed view of the post.
(define (render-post a-post make-url)
(define (render-post a-post embed/url)
(local [(define (view-post-handler request)
(render-post-detail-page a-post request))]
`(div ((class "post"))
(a ((href ,(make-url view-post-handler)))
(a ((href ,(embed/url view-post-handler)))
,(post-title a-post))
(p ,(post-body a-post))
(div ,(number->string (length (post-comments a-post)))
" comment(s)"))))
;; render-posts: (handler -> string) -> xexpr
;; Consumes a make-url, and produces an xexpr fragment
;; Consumes a embed/url, and produces an xexpr fragment
;; of all its posts.
(define (render-posts make-url)
(local [(define (render-post/make-url a-post)
(render-post a-post make-url))]
(define (render-posts embed/url)
(local [(define (render-post/embed/url a-post)
(render-post a-post embed/url))]
`(div ((class "posts"))
,@(map render-post/make-url (blog-posts BLOG)))))
,@(map render-post/embed/url (blog-posts BLOG)))))
;; render-as-itemized-list: (listof xexpr) -> xexpr
;; Consumes a list of items, and produces a rendering as

View File

@ -1,10 +1,10 @@
#lang web-server/insta
;; A blog is a (make-blog posts)
;; A blog is a (blog posts)
;; where posts is a (listof post)
(struct blog (posts) #:mutable)
;; and post is a (make-post title body comments)
;; and post is a (post title body comments)
;; where title is a string, body is a string,
;; and comments is a (listof string)
(struct post (title body comments) #:mutable)
@ -13,12 +13,12 @@
;; The initial BLOG.
(define BLOG
(blog
(list (post "First Post"
"This is my first post"
(list "First comment!"))
(post "Second Post"
(list (post "Second Post"
"This is another post"
(list)))))
(list))
(post "First Post"
"This is my first post"
(list "First comment!")))))
;; blog-insert-post!: blog post -> void
;; Consumes a blog and a post, adds the post at the top of the blog.
@ -45,14 +45,14 @@
;; Produces an HTML page of the content of the
;; BLOG.
(define (render-blog-page request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts make-url)
,(render-posts embed/url)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
(input ((name "title")))
(input ((name "body")))
(input ((type "submit"))))))))
@ -76,7 +76,7 @@
;; The user will be able to either insert new comments
;; or go back to render-blog-page.
(define (render-post-detail-page a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Post Details"))
(body
@ -86,10 +86,10 @@
,(render-as-itemized-list
(post-comments a-post))
(form ((action
,(make-url insert-comment-handler)))
,(embed/url insert-comment-handler)))
(input ((name "comment")))
(input ((type "submit"))))
(a ((href ,(make-url back-handler)))
(a ((href ,(embed/url back-handler)))
"Back to the blog")))))
(define (parse-comment bindings)
@ -113,7 +113,7 @@
;; and goes back to the display page. Otherwise, goes back to
;; the detail page of the post.
(define (render-confirm-add-comment-page a-comment a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Add a Comment"))
(body
@ -122,9 +122,9 @@
"will be added to "
(div ,(post-title a-post))
(p (a ((href ,(make-url yes-handler)))
(p (a ((href ,(embed/url yes-handler)))
"Yes, add the comment."))
(p (a ((href ,(make-url cancel-handler)))
(p (a ((href ,(embed/url cancel-handler)))
"No, I changed my mind!"))))))
(define (yes-handler request)
@ -139,24 +139,24 @@
;; render-post: post (handler -> string) -> xexpr
;; Consumes a post, produces an xexpr fragment of the post.
;; The fragment contains a link to show a detailed view of the post.
(define (render-post a-post make-url)
(define (render-post a-post embed/url)
(local [(define (view-post-handler request)
(render-post-detail-page a-post request))]
`(div ((class "post"))
(a ((href ,(make-url view-post-handler)))
(a ((href ,(embed/url view-post-handler)))
,(post-title a-post))
(p ,(post-body a-post))
(div ,(number->string (length (post-comments a-post)))
" comment(s)"))))
;; render-posts: (handler -> string) -> xexpr
;; Consumes a make-url, produces an xexpr fragment
;; Consumes a embed/url, produces an xexpr fragment
;; of all its posts.
(define (render-posts make-url)
(local [(define (render-post/make-url a-post)
(render-post a-post make-url))]
(define (render-posts embed/url)
(local [(define (render-post/embed/url a-post)
(render-post a-post embed/url))]
`(div ((class "posts"))
,@(map render-post/make-url (blog-posts BLOG)))))
,@(map render-post/embed/url (blog-posts BLOG)))))
;; render-as-itemized-list: (listof xexpr) -> xexpr
;; Consumes a list of items, and produces a rendering as

View File

@ -1,10 +1,10 @@
#lang web-server/insta
;; A blog is a (make-blog posts)
;; A blog is a (blog posts)
;; where posts is a (listof post)
(struct blog (posts) #:mutable)
;; and post is a (make-post title body comments)
;; and post is a (post title body comments)
;; where title is a string, body is a string,
;; and comments is a (listof string)
(struct post (title body comments) #:mutable)
@ -13,12 +13,12 @@
;; The initial BLOG.
(define BLOG
(blog
(list (post "First Post"
"This is my first post"
(list "First comment!"))
(post "Second Post"
(list (post "Second Post"
"This is another post"
(list)))))
(list))
(post "First Post"
"This is my first post"
(list "First comment!")))))
;; blog-insert-post!: blog post -> void
;; Consumes a blog and a post, adds the post at the top of the blog.
@ -45,14 +45,14 @@
;; Produces an HTML page of the content of the
;; BLOG.
(define (render-blog-page request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts make-url)
,(render-posts embed/url)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
(input ((name "title")))
(input ((name "body")))
(input ((type "submit"))))))))
@ -76,7 +76,7 @@
;; The user will be able to either insert new comments
;; or go back to render-blog-page.
(define (render-post-detail-page a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Post Details"))
(body
@ -86,10 +86,10 @@
,(render-as-itemized-list
(post-comments a-post))
(form ((action
,(make-url insert-comment-handler)))
,(embed/url insert-comment-handler)))
(input ((name "comment")))
(input ((type "submit"))))
(a ((href ,(make-url back-handler)))
(a ((href ,(embed/url back-handler)))
"Back to the blog")))))
(define (parse-comment bindings)
@ -113,7 +113,7 @@
;; and goes back to the display page. Otherwise, goes back to
;; the detail page of the post.
(define (render-confirm-add-comment-page a-comment a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Add a Comment"))
(body
@ -122,9 +122,9 @@
"will be added to "
(div ,(post-title a-post))
(p (a ((href ,(make-url yes-handler)))
(p (a ((href ,(embed/url yes-handler)))
"Yes, add the comment."))
(p (a ((href ,(make-url cancel-handler)))
(p (a ((href ,(embed/url cancel-handler)))
"No, I changed my mind!"))))))
(define (yes-handler request)
@ -139,24 +139,24 @@
;; render-post: post (handler -> string) -> xexpr
;; Consumes a post, produces an xexpr fragment of the post.
;; The fragment contains a link to show a detailed view of the post.
(define (render-post a-post make-url)
(define (render-post a-post embed/url)
(local [(define (view-post-handler request)
(render-post-detail-page a-post request))]
`(div ((class "post"))
(a ((href ,(make-url view-post-handler)))
(a ((href ,(embed/url view-post-handler)))
,(post-title a-post))
(p ,(post-body a-post))
(div ,(number->string (length (post-comments a-post)))
" comment(s)"))))
;; render-posts: (handler -> string) -> xexpr
;; Consumes a make-url, produces an xexpr fragment
;; Consumes a embed/url, produces an xexpr fragment
;; of all its posts.
(define (render-posts make-url)
(local [(define (render-post/make-url a-post)
(render-post a-post make-url))]
(define (render-posts embed/url)
(local [(define (render-post/embed/url a-post)
(render-post a-post embed/url))]
`(div ((class "posts"))
,@(map render-post/make-url (blog-posts BLOG)))))
,@(map render-post/embed/url (blog-posts BLOG)))))
;; render-as-itemized-list: (listof xexpr) -> xexpr
;; Consumes a list of items, and produces a rendering as

View File

@ -12,14 +12,14 @@
;; Produces an HTML page of the content of the
;; BLOG.
(define (render-blog-page request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts make-url)
,(render-posts embed/url)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
(input ((name "title")))
(input ((name "body")))
(input ((type "submit"))))))))
@ -43,7 +43,7 @@
;; The user will be able to either insert new comments
;; or go back to render-blog-page.
(define (render-post-detail-page a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Post Details"))
(body
@ -53,10 +53,10 @@
,(render-as-itemized-list
(post-comments a-post))
(form ((action
,(make-url insert-comment-handler)))
,(embed/url insert-comment-handler)))
(input ((name "comment")))
(input ((type "submit"))))
(a ((href ,(make-url back-handler)))
(a ((href ,(embed/url back-handler)))
"Back to the blog")))))
(define (parse-comment bindings)
@ -80,7 +80,7 @@
;; and goes back to the display page. Otherwise, goes back to
;; the detail page of the post.
(define (render-confirm-add-comment-page a-comment a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Add a Comment"))
(body
@ -89,9 +89,9 @@
"will be added to "
(div ,(post-title a-post))
(p (a ((href ,(make-url yes-handler)))
(p (a ((href ,(embed/url yes-handler)))
"Yes, add the comment."))
(p (a ((href ,(make-url cancel-handler)))
(p (a ((href ,(embed/url cancel-handler)))
"No, I changed my mind!"))))))
(define (yes-handler request)
@ -106,24 +106,24 @@
;; render-post: post (handler -> string) -> xexpr
;; Consumes a post, produces an xexpr fragment of the post.
;; The fragment contains a link to show a detailed view of the post.
(define (render-post a-post make-url)
(define (render-post a-post embed/url)
(local [(define (view-post-handler request)
(render-post-detail-page a-post request))]
`(div ((class "post"))
(a ((href ,(make-url view-post-handler)))
(a ((href ,(embed/url view-post-handler)))
,(post-title a-post))
(p ,(post-body a-post))
(div ,(number->string (length (post-comments a-post)))
" comment(s)"))))
;; render-posts: (handler -> string) -> xexpr
;; Consumes a make-url, produces an xexpr fragment
;; Consumes a embed/url, produces an xexpr fragment
;; of all its posts.
(define (render-posts make-url)
(local [(define (render-post/make-url a-post)
(render-post a-post make-url))]
(define (render-posts embed/url)
(local [(define (render-post/embed/url a-post)
(render-post a-post embed/url))]
`(div ((class "posts"))
,@(map render-post/make-url (blog-posts BLOG)))))
,@(map render-post/embed/url (blog-posts BLOG)))))
;; render-as-itemized-list: (listof xexpr) -> xexpr
;; Consumes a list of items, and produces a rendering as

View File

@ -16,14 +16,14 @@
;; Produces an HTML page of the content of the
;; blog.
(define (render-blog-page a-blog request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts a-blog make-url)
,(render-posts a-blog embed/url)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
(input ((name "title")))
(input ((name "body")))
(input ((type "submit"))))))))
@ -43,7 +43,7 @@
;; The user will be able to either insert new comments
;; or go back to render-blog-page.
(define (render-post-detail-page a-blog a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Post Details"))
(body
@ -53,10 +53,10 @@
,(render-as-itemized-list
(post-comments a-post))
(form ((action
,(make-url insert-comment-handler)))
,(embed/url insert-comment-handler)))
(input ((name "comment")))
(input ((type "submit"))))
(a ((href ,(make-url back-handler)))
(a ((href ,(embed/url back-handler)))
"Back to the blog")))))
(define (parse-comment bindings)
@ -82,7 +82,7 @@
;; the detail page of the post.
(define (render-confirm-add-comment-page a-blog a-comment
a-post request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Add a Comment"))
(body
@ -91,9 +91,9 @@
"will be added to "
(div ,(post-title a-post))
(p (a ((href ,(make-url yes-handler)))
(p (a ((href ,(embed/url yes-handler)))
"Yes, add the comment."))
(p (a ((href ,(make-url cancel-handler)))
(p (a ((href ,(embed/url cancel-handler)))
"No, I changed my mind!"))))))
(define (yes-handler request)
@ -108,24 +108,24 @@
;; render-post: post (handler -> string) -> xexpr
;; Consumes a post, produces an xexpr fragment of the post.
;; The fragment contains a link to show a detailed view of the post.
(define (render-post a-blog a-post make-url)
(define (render-post a-blog a-post embed/url)
(local [(define (view-post-handler request)
(render-post-detail-page a-blog a-post request))]
`(div ((class "post"))
(a ((href ,(make-url view-post-handler)))
(a ((href ,(embed/url view-post-handler)))
,(post-title a-post))
(p ,(post-body a-post))
(div ,(number->string (length (post-comments a-post)))
" comment(s)"))))
;; render-posts: blog (handler -> string) -> xexpr
;; Consumes a make-url, produces an xexpr fragment
;; Consumes a embed/url, produces an xexpr fragment
;; of all its posts.
(define (render-posts a-blog make-url)
(local [(define (render-post/make-url a-post)
(render-post a-blog a-post make-url))]
(define (render-posts a-blog embed/url)
(local [(define (render-post/embed/url a-post)
(render-post a-blog a-post embed/url))]
`(div ((class "posts"))
,@(map render-post/make-url (blog-posts a-blog)))))
,@(map render-post/embed/url (blog-posts a-blog)))))
;; render-as-itemized-list: (listof xexpr) -> xexpr
;; Consumes a list of items, and produces a rendering as

View File

@ -16,14 +16,14 @@
;; Sends an HTML page of the content of the
;; blog.
(define (render-blog-page a-blog request)
(define (response-generator make-url)
(define (response-generator embed/url)
(response/xexpr
`(html (head (title "My Blog"))
(body
(h1 "My Blog")
,(render-posts a-blog make-url)
,(render-posts a-blog embed/url)
(form ((action
,(make-url insert-post-handler)))
,(embed/url insert-post-handler)))
(input ((name "title")))
(input ((name "body")))
(input ((type "submit"))))))))
@ -43,7 +43,7 @@
;; The user will be able to either insert new comments
;; or go back to render-blog-page.
(define (render-post-detail-page a-blog a-post request)
(define (response-generator make-url)
(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Post Details"))
(body
@ -53,10 +53,10 @@
,(render-as-itemized-list
(post-comments a-post))
(form ((action
,(make-url insert-comment-handler)))
,(embed/url insert-comment-handler)))
(input ((name "comment")))
(input ((type "submit"))))
(a ((href ,(make-url back-handler)))
(a ((href ,(embed/url back-handler)))
"Back to the blog")))))
(define (parse-comment bindings)
@ -82,7 +82,7 @@
;; the detail page of the post.
(define (render-confirm-add-comment-page a-blog a-comment
a-post request)
(define (response-generator make-url)
(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Add a Comment"))
(body
@ -91,9 +91,9 @@
"will be added to "
(div ,(post-title a-post))
(p (a ((href ,(make-url yes-handler)))
(p (a ((href ,(embed/url yes-handler)))
"Yes, add the comment."))
(p (a ((href ,(make-url cancel-handler)))
(p (a ((href ,(embed/url cancel-handler)))
"No, I changed my mind!"))))))
(define (yes-handler request)
@ -108,26 +108,26 @@
;; render-post: post (handler -> string) -> xexpr
;; Consumes a post, produces an xexpr fragment of the post.
;; The fragment contains a link to show a detailed view of the post.
(define (render-post a-blog a-post make-url)
(define (render-post a-blog a-post embed/url)
(define (view-post-handler request)
(render-post-detail-page a-blog a-post request))
`(div ((class "post"))
(a ((href ,(make-url view-post-handler)))
(a ((href ,(embed/url view-post-handler)))
,(post-title a-post))
(p ,(post-body a-post))
(div ,(number->string (length (post-comments a-post)))
" comment(s)")))
;; render-posts: blog (handler -> string) -> xexpr
;; Consumes a make-url, produces an xexpr fragment
;; Consumes a embed/url, produces an xexpr fragment
;; of all its posts.
(define (render-posts a-blog make-url)
(define (render-post/make-url a-post)
(render-post a-blog a-post make-url))
(define (render-posts a-blog embed/url)
(define (render-post/embed/url a-post)
(render-post a-blog a-post embed/url))
`(div ((class "posts"))
,@(map render-post/make-url (blog-posts a-blog))))
,@(map render-post/embed/url (blog-posts a-blog))))
;; render-as-itemized-list: (listof xexpr) -> xexpr
;; Consumes a list of items, and produces a rendering as

View File

@ -2,11 +2,11 @@
(require racket/local
racket/list)
;; A blog is a (make-blog home posts)
;; A blog is a (blog home posts)
;; where home is a string, posts is a (listof post)
(struct blog (home posts) #:mutable #:prefab)
;; and post is a (make-post blog title body comments)
;; and post is a (post blog title body comments)
;; where title is a string, body is a string,
;; and comments is a (listof string)
(struct post (title body comments) #:mutable #:prefab)
@ -17,12 +17,12 @@
(local [(define (log-missing-exn-handler exn)
(blog
(path->string home)
(list (post "First Post"
"This is my first post"
(list "First comment!"))
(post "Second Post"
(list (post "Second Post"
"This is another post"
(list)))))
(list))
(post "First Post"
"This is my first post"
(list "First comment!")))))
(define the-blog
(with-handlers ([exn? log-missing-exn-handler])
(with-input-from-file home read)))]

View File

@ -3,11 +3,11 @@
racket/local
db)
;; A blog is a (make-blog db)
;; A blog is a (blog db)
;; where db is an sqlite connection
(struct blog (db))
;; A post is a (make-post blog id)
;; A post is a (post blog id)
;; where blog is a blog and id is an integer?
(struct post (blog id))

View File

@ -1,10 +1,10 @@
#lang racket/base
;; A blog is a (make-blog posts)
;; A blog is a (blog posts)
;; where posts is a (listof post)
(struct blog (posts) #:mutable)
;; and post is a (make-post title body comments)
;; and post is a (post title body comments)
;; where title is a string, body is a string,
;; and comments is a (listof string)
(struct post (title body comments) #:mutable)
@ -13,12 +13,12 @@
;; The initial BLOG.
(define BLOG
(blog
(list (post "First Post"
"This is my first post"
(list "First comment!"))
(post "Second Post"
(list (post "Second Post"
"This is another post"
(list)))))
(list))
(post "First Post"
"This is my first post"
(list "First comment!")))))
;; blog-insert-post!: blog post -> void
;; Consumes a blog and a post, adds the post at the top of the blog.

View File

@ -1,6 +1,6 @@
#lang web-server/insta
;; A roster is a (make-roster names)
;; A roster is a (roster names)
;; where names is a list of string.
(struct roster (names) #:mutable)
@ -20,14 +20,14 @@
;; show-roster: request -> doesn't return
(define (show-roster request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Roster"))
(body (h1 "Roster")
,(render-as-itemized-list
(roster-names ROSTER))
(form ((action
,(make-url add-name-handler)))
,(embed/url add-name-handler)))
(input ((name "a-name")))
(input ((type "submit"))))))))
(define (parse-name bindings)

View File

@ -3,12 +3,12 @@
;; start: request -> response
(define (start request)
(send/suspend/dispatch
(lambda (make-url)
(lambda (embed/url)
(response/xexpr
`(html
(body
(a ((href ,(make-url link-1))) "Link 1")
(a ((href ,(make-url link-2))) "Link 2")))))))
(a ((href ,(embed/url link-1))) "Link 1")
(a ((href ,(embed/url link-2))) "Link 2")))))))
;; link-1: request -> response

View File

@ -6,11 +6,11 @@
;; show-counter: number -> doesn't return
(define (show-counter n)
(send/suspend/dispatch
(lambda (make-url)
(lambda (embed/url)
(response/xexpr
`(html (head (title "Counting example"))
(body
(a ((href ,(make-url
(a ((href ,(embed/url
(lambda (request)
(show-counter (+ n 1))))))
,(number->string n))))))))

View File

@ -1,6 +1,6 @@
#lang web-server/insta
;; A roster is a (make-roster names)
;; A roster is a (roster names)
;; where names is a list of string.
(struct roster (names) #:mutable)
@ -20,14 +20,14 @@
;; show-roster: request -> doesn't return
(define (show-roster request)
(local [(define (response-generator make-url)
(local [(define (response-generator embed/url)
(response/xexpr
`(html (head (title "Roster"))
(body (h1 "Roster")
,(render-as-itemized-list
(roster-names ROSTER))
(form ((action
,(make-url add-name-handler)))
,(embed/url add-name-handler)))
(input ((name "a-name")))
(input ((type "submit"))))))))
(define (parse-name bindings)

View File

@ -60,7 +60,7 @@ functions of interest for the servlet developer.
@defproc[(send/suspend/dispatch [make-response (((request? . -> . any) . -> . string?) . -> . can-be-response?)])
any]{
Calls @racket[make-response] with a function (@racket[embed/url]) that, when called with a procedure from
Calls @racket[make-response] with a function (often named @racket[embed/url]) that, when called with a procedure from
@racket[request?] to @racket[any/c] will generate a URL, that when invoked will call
the function with the @racket[request?] object and return the result to the caller of
@racket[send/suspend/dispatch]. Therefore, if you pass @racket[embed/url] the identity function,