评估Racket响应/ xexpr中的变量

时间:2016-07-28 21:06:02

标签: racket

我试图在Racket中制作一个简单的书签网页应用程序。

它意味着收到一个网址作为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(被视为实体)中被字面引用,而不是被评估为变量。

那么我做错了什么?如何评估网址?

2 个答案:

答案 0 :(得分:5)

您需要使用quasiquoteunquote将值注入引用的扩展中,更常见的是它们的读者缩写等价物`,。当您在unquote / ,内使用quasiquote / `时,它会评估表达式并将其插入周围的引号:

> (define url "http://google.com")
> `(p "URL = " ,url)
(p "URL = " "http://google.com")

您应该将,放在模板中的url前面以取消引用它。

有关引用和准引用的更详细说明,请参阅Appendix A of this answer

答案 1 :(得分:2)

使用,url

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

在文档中查找unquotehttp://docs.racket-lang.org/reference/quasiquote.html?q=unquote#%28form.%28%28quote.~23~25kernel%29._unquote%29%29