【问题标题】:How to use check-expect in Racket如何在 Racket 中使用 check-expect
【发布时间】:2014-02-24 21:12:16
【问题描述】:

我正在尝试在方案中使用 check-expect 函数,但我一直被告知它是 check-expect 的未绑定标识符。 check-expect 不是我已经可以使用的功能吗?以下是我的代码:

#lang racket

(define contains (lambda (item list*) 
                   (if (equal? list* '()) 
                        #f
                        (if (equal? item (car list*)) 
                            #t
                            (contains item (cdr list*))))))

(define z (list 1 2 3))
(define q (list 4 5 6))
(define p (list "apple" "orange" "carrot"))
(check-expect (contains 1 z) #t)

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    老问题,但谷歌人的答案:

    您可以(require test-engine/racket-tests),其中defines check-expect

    请注意,与 BSL 不同,您必须使用 (test) 运行测试。

    【讨论】:

      【解决方案2】:

      check-expect 在技术上不会自动内置到方案或 Racket 中。

      请注意,您使用的是#lang racket。那是专业的 Racket 语言,该语言希望您知道并明确说明要导入哪些库。它不会为您自动导入它们。

      (现在,您可能需要unit testing library;Racket 标准库附带了一个。)

      但如果您刚刚开始学习编程,那么在 Racket 中使用teaching languages 之一会更有意义。

      对于您在上面使用的代码,我怀疑您可能会想要这个。启动 DrRacket 并从“语言”菜单的“如何设计程序”子菜单中选择“初学者学生语言”。

      更多详情请见http://www.ccs.neu.edu/home/matthias/HtDP2e/prologue.html

      【讨论】:

      • 不可能直接在代码中编写需求,所以我使文件与机器无关(带有菜单的解决方案仅适用于当前计算机)? (require lang/htdp-beginner)#lang 2htdp/bsl 之类的东西?
      • @Liviu 我刚刚添加了一个答案,可能会对您有所帮助。
      【解决方案3】:

      我想出了这个解决方法:

      在文件的顶部(但在#lang racket之后)添加了一行

      (require rackunit)

      我用的不是(check-expect)

      (check-equal? (member? "a" (list "b" "a")) #f )

      check-expect 不同,必须在函数定义之后添加测试。 如果检查成功,则没有输出。仅当测试失败时,输出如下所示:

      --------------------
      FAILURE
      name:       check-equal?
      actual:     #f
      expected:   #t
      expression: (check-equal? #f (member? "a" (list "b" "a")))
      message:    "test"
      

      更多信息:RackUnit documentation

      【讨论】:

        【解决方案4】:

        我使用 DrRacket 上了一堂课,并在终端 (Mac) 中查看了第一个作业。

        此文件中由 DrRacket 自动添加的使 check-expect 可用的行是:

        #reader(lib "htdp-beginner-reader.ss" "lang")((modname basic) (read-case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-decimal #f #t none #f () #f)))
        



        顺便说一句,我想尝试一个没有 DrRacket 的 Racket 程序。只是为了测试,我决定做(+ 1 2)。为了让它工作,我的文件如下所示:

        #! /Applications/Racket\ v6.2.1/bin/racket
        #lang racket
        (+ 1 2)
        

        我在终端中这样运行它:

        racket test.rkt
        

        我把它放在 .bash_profile 中:

        alias racket='/Applications/Racket\ v6.2.1/bin/racket'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-13
          • 1970-01-01
          • 1970-01-01
          • 2016-03-18
          • 1970-01-01
          相关资源
          最近更新 更多