Racket 球拍响应/xexpr中的评估变量

Racket 球拍响应/xexpr中的评估变量,racket,Racket,我正在尝试在Racket中制作一个简单的书签web应用程序 它的目的是接收一个url作为CGI参数,现在,我只是想通过反射来确认我收到了它 (define (start request) (response/xexpr (let* ([bindings (request-bindings request)] [url (if (exists-binding? 'url bindings) (extract-binding/sing

我正在尝试在Racket中制作一个简单的书签web应用程序

它的目的是接收一个url作为CGI参数,现在,我只是想通过反射来确认我收到了它

(define (start request)
  (response/xexpr
   (let* ([bindings (request-bindings request)]
          [url (if (exists-binding? 'url bindings)
                  (extract-binding/single 'url bindings)
                  "NO URL")])
     `(html
       (head (title "TITLE"))
       (body (h2 "TITLE")               
           (p "URL = " url))    
           ))))
然而,我没有看到我期望看到的。。哪个页面包含

URL = http://google.com
我看到了

URL = &url;
这表明url在xexpr中被逐字引用(被视为一个实体),而不是作为一个变量进行计算


那么我做错了什么?如何计算url?

使用
,url

 `(html
       (head (title "TITLE"))
       (body (h2 "TITLE")               
           (p "URL = " ,url))    
           ))))

在文档中查找
unquote

您需要分别使用
quasikote
unquote
将值注入到带引号的表达式中,通常被视为它们的读取器缩写等价物,
`
。使用
unquote
/
quasikote
/
`
内部时,它将计算表达式并将其插入周围的引号中:

> (define url "http://google.com")
> `(p "URL = " ,url)
(p "URL = " "http://google.com")
您应该将
放在模板中
url
的前面,以将其解压缩


有关引号和准旋转的更详细解释,请参见。

好的,我没有看到,我认为表达式开头的反勾号足以让变量进行这样的计算。谢谢