首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用racket txexpr呈现列表

使用racket txexpr呈现列表
EN

Stack Overflow用户
提问于 2021-10-25 20:59:55
回答 1查看 38关注 0票数 1

我正在尝试使用txexpr呈现球拍中的物品列表

代码语言:javascript
复制
(define (item-list items)
  (if (empty? items)
      (txexpr 'p empty '("No items to display."))
      (txexpr* 'ul empty
               (for ([item items])
                 (txexpr 'li empty (list (cadr item)))))))

我的测试代码如下所示:

代码语言:javascript
复制
(module+ test
   (test-case "item-list will return a default message if the item list is empty"
     (define result "<p>No items to display.</p>")
     (define no-items empty)
     (check-equal? (xexpr->html (rule-list no-items)) result))
  (test-case "item-list will return an unordered list of each item"
    (define result "<ul><li>email address</li><li>phone number</li></ul>")
    (define two-items '((1 "email address") (2 "phone number")))
    (check-equal? (xexpr->html (rule-list two-items)) result)))

当我运行测试时,我在第二个测试中得到以下错误:

代码语言:javascript
复制
txexpr*: contract violation
  expected: txexpr-elements?
  given: '(#<void>)

我现在被难住了。如何获取要呈现的项目列表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-23 10:53:50

所以需要注意的是,在某些时候,你会得到一个列表列表。

代码语言:javascript
复制
(define (item-list items)
  (if (empty? items)
      (txexpr 'p empty '("No items to display."))
      (txexpr 'ul empty
              (for/list ([item items])
                (quasiquote (li (unquote (cadr item))))))))

这意味着我需要正确地引用规则列表,并且数据结构对于txexpr来说是可理解的。例如,运行包含两个项目的列表

代码语言:javascript
复制
(item-list (list '(1 "one") '(2 "two")))

得到如下的数据结构:

代码语言:javascript
复制
'(ul (li "one") (li "two"))

希望这能帮助到其他人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69714703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档